我正在尝试分析java项目的代码。 我有一个jar的分析项目,我使用insertClassPath函数添加到javassist路径。如果我尝试从项目中访问类,一切正常。 问题是我还需要访问项目使用的库中的类。
我尝试将库添加到类路径中,就像我对项目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!!");
}
我使用了带编码的字符串仅用于测试目的。 jar位于lib文件夹或存档到jar的项目中。 我不知道如何添加另一个jar中包含的jar。
注意:如果我将库保存为一个单独的jar(并给出路径如:“C:/Users/diana/Desktop/Test/bcel-5.2.jar”),那就很好了
任何帮助将不胜感激
答案 0 :(得分:0)
如果您的目标JAR位于另一个JAR中,则可以使用LoaderClassPath创建的URLClassLoader,JarURLConnection使用JAR的http://www.tek-tips.com/viewthread.cfm?qid=854759网址路径定义。
假设你有一个目标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));