gpt4 book ai didi

java - 使用ASM5.0.2获取依赖项

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:40 26 4
gpt4 key购买 nike

我有一个基于ASM 5.0.2的Java程序提取类之间的依赖关系。该程序与普通的 Java 应用程序一起工作得很好。但是,当我将程序作为插件运行时,它会因错误而崩溃:java.lang.ClassNotFoundException

作为一个例子,如果示例类使用junit.Assert,那么当我作为普通java应用程序运行该项目时,它会找到这个依赖项,但是当作为插件时出现以下错误:

java.lang.ClassNotFoundException: org.junit.Assert
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:798)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)

我认为错误的部分代码如下,整个代码可以在这个link中找到:

class ClassCollector extends Remapper {

static Set<Class<?>> getClassesUsedBy(final String name, final String prefix, File root) throws IOException {

final ClassReader reader = new ClassReader(name);
final Set<Class<?>> classes = new TreeSet<Class<?>> (new Comparator<Class<?>>() {

@Override
public int compare (final Class<?> o1, final Class<?> o2) {
return o1.getName().compareTo (o2.getName());
}
});

final Remapper remapper = new ClassCollector(classes, prefix, root);
final ClassWriter inner = new ClassWriter(ClassWriter.COMPUTE_MAXS);
final RemappingClassAdapter visitor = new RemappingClassAdapter(inner, remapper);
try {
reader.accept(visitor, ClassReader.EXPAND_FRAMES);
}
catch (Exception ex) {
ex.toString();
}
return classes;
}

重要:当我用null初始化inner(如下)时,程序不会崩溃,但无法检测到所有依赖项,例如上例中无法检测到断言依赖项。

final ClassVisitor inner = null; //new ClassWriter(ClassWriter.COMPUTE_MAXS);

如果有人知道为什么该程序作为普通java应用程序是正确的,但作为插件时会崩溃,请告诉我。

最佳答案

ClassReader(String name) 使用 ClassLoader.loadSystemResourceAsStream() 方法访问所请求类的字节。如果您要分析的类不在类路径中,则这将不起作用,因为类路径是 loadSystemResourceAsStream 搜索的内容。

关于java - 使用ASM5.0.2获取依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25140036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com