Skip to content

Instantly share code, notes, and snippets.

@XuefengWu
Created November 17, 2013 10:42
Show Gist options
  • Save XuefengWu/7511805 to your computer and use it in GitHub Desktop.
Save XuefengWu/7511805 to your computer and use it in GitHub Desktop.
Read classes from pageckage
package rel
object PackageClassReaderDemo extends App{
println(PackageClassReader.getClassNamesFromPackage("org.apache.spark.examples","/Users/xfwu/hadoop/workspace/app/app.jar").mkString("\n"))
}
object PackageClassReader {
def getClassNamesFromPackage(packageName: String,file:String): Seq[String] = {
val names = new scala.collection.mutable.ListBuffer[String]
val packagePath = packageName.replace(".", "/")
if(file.endsWith("jar")){
// build jar file name, then loop through zipped entries
val jf = new java.util.jar.JarFile(file)
val jarEntries = jf.entries()
while(jarEntries.hasMoreElements()){
val entryName = jarEntries.nextElement().getName()
if(entryName.startsWith(packagePath) && entryName.length()>packagePath.length()+5 && !entryName.endsWith("/")){
names += entryName//entryName.substring(packagePath.length()+1,entryName.lastIndexOf('.'))
}
}
// loop through files in classpath
} else{
val folder = new java.io.File(file+"/"+packagePath);
// won't work with path which contains blank (%20)
// File folder = new File(packageURL.getFile());
val clzs =
folder.listFiles().map{ actual =>
actual.getName
//entryName.substring(0, entryName.lastIndexOf('.'))
}
names ++= clzs
}
names
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment