2010-12-22 23 views
2
java -classpath requiredclasspath org.junit.runner.JUnitCore some.package.HelloWorldTest 

结果:使用使用JUnit javaagent造成的ClassNotFoundException中的Class.forName

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) 

我不知道为什么它不能找到类。请注意,仪表代理已成功加载,并且不会抛出任何异常。

+1

代理是做什么的? – axtavt 2010-12-22 17:59:04

+1

它将某些监控代码用于某些类。 – Vilas 2010-12-22 19:20:22

回答

2

原来我在为javaagent以及通过-classpath即舱单agent.jar中指定的用户类路径中指定的引导类路径JUnit的罐子有如下条目:

Boot-Class-Path: ...junit.jar... 

和-classpath参数java命令有以下几点:

-classpath ...junit.jar... 

我能够从清单引导类路径条目删除的junit.jar来解决这个问题。下面是该问题的简短说明:

由于junit.jar包含在引导类路径中,因此org.junit.runner.JUnitCore首次使用引导类加载程序加载。所以当在JunitCore中调用Class.forName时,它试图使用引导类加载器找到类,因为它不是引导类路径的一部分,所以找不到该类。

0
some.package.HelloWorldTest 

不在CLASSPATH中。加入它,一切都会很好。

相关问题