2013-11-15 43 views
0

我正在尝试编写一个简单的代码分析器,并且对于初学者,只是想创建一个类路径为单个jar文件的实例,其独立于实际代码分析器应用程序的类路径。然后我想获得所有条目的列表,但是在类路径的上下文中使用反射来做一些基本的代码分析并列出结果。是否有可能创建一个包含单个jar的ClassLoader?

是否有可能创建一个ClassLoader,其中包含一个可以使用反射进一步分析其清单的单个jar?

例如,创建一个自定义的加载:

String clspath = "/my/dir/myjar.jar"; 

URL clspathURL = null; 

try { 
    clspathURL = new URL("file:///" + clspath); 
} catch(MalformedURLException badURLex) { 

} 

然后做一些事情来列出所有它加载或者(如果它在初始化时加载所有可用的类,以它不知道)类,如果它不加载所有的类,加载它们

然后能够使用反射进行内存代码分析。

+2

我很困惑你的问题。 'ClassLoader'是一个类,它不包含任何JAR。 – m0skit0

+2

你看过URLClassLoader吗? – Ingo

+0

URLClassLoader的作品。但可以列出其中包含的所有类吗? – amphibient

回答

1

从罐子里获取文件列表和加载反射类是两个独立的东西。用于第一个ZipInputStream和第二任务URLClassLoader

URL jar = ...; 

ClassLoader cl = new URLClassLoader(new URL[]{jar}); 

ZipInputStream zip = new ZipInputStream(jar.openStream()); 
while(true) { 
    ZipEntry e = zip.getNextEntry(); 
    if (e == null) 
     break; 
    String nameAsInZip = e.getName(): 

    if(nameAsInZip.endsWith(".class")) { 

     String nameForClassLoader = ....; // transform name for CL 

     Class clazz = cl.loadClass(nameForClassLoader); 

     // analyze class 

    } 

} 
+0

是的。这就对了。你需要赶上'IOException',但没关系...... – amphibient

+0

是的,你是对的。 – mwhs

相关问题