【问题标题】:Using javaagent with Junit is causing ClassNotFoundException in Class.forName将 javaagent 与 Junit 一起使用会导致 Class.forName 中出现 ClassNotFoundException
【发布时间】:2010-12-22 17:26:40
【问题描述】:
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)

我不知道为什么它找不到类。请注意,检测代理已成功加载并且不会引发任何异常。

【问题讨论】:

  • 它将一些监控代码插入到一些类中。

标签: java classloader junit4 javaagents


【解决方案1】:

原来我在引导类路径中为 javaagent 指定了 junit jar,以及通过 -classpath 指定的用户类路径,即 agent.jar 的清单具有以下条目:

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

java 命令的 -classpath 参数如下:

-classpath ...junit.jar...

我能够通过从清单引导类路径条目中删除 junit.jar 来解决此问题。以下是对该问题的简短说明:

因为 junit.jar 包含在引导类路径中,所以首先使用引导类加载器加载 org.junit.runner.JUnitCore。因此,当在 JunitCore 中调用 Class.forName 时,它​​会尝试使用引导类加载器查找类,但由于它不是引导类路径的一部分,因此无法找到该类。

【讨论】:

    【解决方案2】:
    some.package.HelloWorldTest 
    

    不在 CLASSPATH 中。添加它,一切都会好起来的。

    【讨论】:

    • 感谢您的回答。不幸的是,事情并没有那么简单。如您所见,如果我不使用javaagent,则找到该类并成功执行测试。所以类路径(requiredclasspath)里面一定要有some.package.HelloWorldTest。
    • 对不起,我想我的回复不是很清楚。 “some.package.HelloWorldTest”在类路径中,即包含“some/package/HelloWorldTest.class”的目录包含在类路径中。但是,在使用 javaagent 时仍然会抛出 ClassNotFoundException。
    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2019-09-19
    • 2014-01-28
    • 2017-02-03
    • 2019-12-31
    相关资源
    最近更新 更多