java -classpath requiredclasspath org.junit.runner.JUnitCore some.package.HelloWorldTest
结果:
JUnit version 4.8.1
.
Time: 0.005
OK (1 test)
可是:
java -javaagent:agent.jar -classpath requiredclasspath org.junit.runner.JUnitCore some.package.HelloWorldTest
结果:
JUnit version 4.8.1
Could not find class: some.package.HelloWorldTest
Time: 0.001
OK (0 tests)
核心问题似乎是:
Class.forName("some.package.HelloWorldTest") (runMain method, line 89, JunitCore)
抛出ClassNotFoundException,如下所示:
java.lang.ClassNotFoundException: some/package/HelloWorldTest
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:89)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53)
at org.junit.runner.JUnitCore.main(JUnitCore.java:45)
我不知道为什么找不到这门课。请注意,检测代理程序已成功加载,并且不会引发任何异常。
答案 0 :(得分:2)
原来我在为javaagent指定的引导类路径中有junit jar,以及通过-classpath指定的用户类路径,即agent.jar的manifest有以下条目:
Boot-Class-Path: ...junit.jar...
并且java命令的-classpath参数具有以下内容:
-classpath ...junit.jar...
我能够通过从manifest boot classpath条目中删除junit.jar来解决问题。以下是对该问题的简短解释:
由于junit.jar包含在引导类路径中,因此首先使用引导类加载器加载org.junit.runner.JUnitCore。因此,当在JunitCore中调用Class.forName时,它尝试使用无法找到该类的引导类加载器来查找该类,因为它不是引导类路径的一部分。
答案 1 :(得分:0)
some.package.HelloWorldTest
不在CLASSPATH中。添加它,一切都会很好。