使用javassist

时间:2016-05-16 18:29:19

标签: java javassist

我正在尝试分析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”),那就很好了

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

如果您的目标JAR位于另一个JAR中,则可以使用LoaderClassPath创建的URLClassLoaderJarURLConnection使用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));