我正试图摆弄Foursquare's HeapAudit,并尝试使用IntelliJ IDEA进行设置。我已经设法使用pom.xml中的依赖项来构建它。
然而,当我实际尝试运行JUnit测试时,基本上所有测试都失败了。我猜这是因为使用HeapAudit需要将JVM作为-javaagent
启动,根据github:
$ java -javaagent:heapaudit.jar MyTest
如果我把这一行放进去,并且参考我先前下载/构建的heapaudit.jar
,大概会通过测试。但是,在我看来,如果我对源进行更改,我将需要重新打包这个愚蠢的.jar文件,以查看它是否有效。
是否有任何方法可以使用-javaagent
运行测试而无需完成编译的整个过程 - > package-into-jar每个测试周期?也许让IntelliJ在运行测试之前将新编译的.class
文件作为-javaagent
附加?
答案 0 :(得分:4)
META-INF/MANIFEST.MF
清单必须使用Premain-Class
和其他属性进行正确配置。 jar不需要任何其他文件。将此jar与-javaagent
一起使用。如果代理类位于类路径中,则代理将正常启动。
将maven-surefire-plugin
与forkMode=never
一起使用时可能会失败,因为默认情况下,应用程序类会加载到子类ClassLoader中。
适用于Eclipse和Intellij。
如果这样做,请仔细检查清单语法(一旦我花了很长时间才发现包名称错误)。
它允许您在运行时加载代理(任何代理)(它使用VM.attach()
)。但是VM.attach()
有时会中断调试和断点可能无法触发。
forkMode = never
中的surefire会遇到同样的问题将您的代码写入load the agent in runtime。从你的@BeforeClass
中调用它你仍然需要一个jar(你可以在运行时生成它)。
你需要打电话给这个(只有一次):
AgentLoader.loadAgentClass(YourAgentClass.class.getName());