2016-05-16 162 views
0

我想分析一个java项目的代码。 我有一个jar文件,我使用insertClassPath函数添加到javassist路径中进行分析。如果我尝试从项目中访问一个类,一切正常。 问题是我还需要访问项目使用的库中的类。用javassist加载库jar

我试图将库添加到类路径中,就像我使用项目jar一样,但是我得到一个NotFoundException,所以我想我没有给出正确的路径。

的代码看起来是这样的:

String jarFileName = "C:/Users/diana/Desktop/Test/ckjm.jar"; 
ClassPool pool = ClassPool.getDefault(); 
    try{ 
     pool.insertClassPath(jarFileName); 
     pool.insertClassPath("C:/Users/diana/Desktop/Test/ckjm/lib/bcel-5.2.jar"); 
    } catch (NotFoundException e) { 
     System.out.println("error loading jar!!"); 
    } 

我用harcoded字符串只是用于测试目的。该jar文件位于lib文件夹或归档到jar中的项目中。 我不知道如何添加另一个jar中包含的jar。

注:如果我把图书馆作为一个单独的jar(并给予路径,如:“C:/Users/diana/Desktop/Test/bcel-5.2.jar”),它炒菜罚款

任何帮助将不胜感激

回答

0

如果您的目标JAR位于另一个JAR中,则可以使用使用URLClassLoader创建的LoaderClassPath,该网址使用JAR的JarURLConnection URL路径定义。

所以假设你有一个目标JAR,inner.jar,嵌入到另一个JAR,内部C:/Users/diana/outer.jar

我们假设它位于一个名为lib的子目录中。

外部JAR的URL将为file:/ C:/Users/diana/outer.jar

内部JAR的URL将为jar:file:/ C:/Users/diana/outer.jar!/lib/inner.jar

您的代码加载了这个类路径将是:

URL cpUrl = new URL("jar:file:/C:/Users/diana/outer.jar!/lib/inner.jar"); 
URLClassLoader cpUrlLoader = new URLClassLoader(new URL[]{cpUrl}); 
pool.insertClassPath(new LoaderClassPath(cpUrlLoader)); 
+0

我都试过,但我依然无法从罐子访问类。 insertClassPath函数不会引发异常,但是当我尝试使用pool.get(className)访问类时,我得到NotFoundException –