我正在为作业编写一个静态分析工具,它使用 ASM 库分析 Java 字节码。我们使用的 ASM 的其中一个部分要求(或至少似乎要求)从 ClassLoader 加载类。
我们希望该工具能够分析 .class 文件,而无需将它们放在类路径中。我们已经在运行时从指定目录加载 .classes 并使用 InputStream 读取它们。在大多数情况下,这对于 ASM 来说是可以接受的。有一些类,例如SimpleVerifier
,尝试加载这些类。
在这种情况下,是否可以注册要加载的 .class 文件,以便调用Class.forName()
将加载它们?或者有没有一种简单的方法来扩展 ClassLoader 以允许这样做?
编辑:关于的信息URLClassLoader
很有用。不幸的是,Thread.currentThread().setContextClassLoader()
在这种情况下使用该实例不起作用。我调用的库代码使用它在实例初始化时使用getClass().getClassLoader()
.
当我设置 URLClassLoader 时,该类尚未初始化,所以我猜 contextClassLoader 没有加载该类。
我是否正确理解了这些回答?是否有可能使用 URLClassLoader 加载第 3 方类?