我正在尝试开发一个Java代理,它将借助asm-4来检测代码。现在,我陷入了一个非常基本的问题,javaagent的类加载器看不到asm依赖关系,因此失败。我是否必须提供一个jar- with- dependencies(又名maven构建插件),其中包含代理所需的所有类,或者是否有另一种方法可将类添加到Java代理?直接在类路径中引用jar asm-all.jar并没有帮助。最初,构建具有依赖关系的jar并没有帮助,因为无法使用程序集插件设置Premain-Class属性。感谢帮助;-)
好的,通过实验找到了它。依赖类应该是jar的一部分,可以通过maven程序集插件创建,例如:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <index>true</index> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> </manifest> <manifestEntries> <Premain-Class>test.agent.MyAgent</Premain-Class> </manifestEntries> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- append to the packaging phase. --> <goals> <goal>single</goal> <!-- goals == mojos --> </goals> </execution> </executions> </plugin>
使用jar作为javaagent路径,一切正常。