Gradle JRE vs JDK,请从您的JDK中添加lib / tools.jar

ioanbsu

我正在使用gradle运行Java测试。这是我的例外情况:

java.lang.RuntimeException: java.lang.IllegalStateException: Unable to load Java agent; please add lib/tools.jar from your JDK to the classpath
at org.powermock.modules.agent.PowerMockClassRedefiner.redefine(PowerMockClassRedefiner.java:59)
at org.powermock.modules.agent.support.PowerMockAgentTestInitializer.redefine(PowerMockAgentTestInitializer.java:49)
at org.powermock.modules.agent.support.PowerMockAgentTestInitializer.initialize(PowerMockAgentTestInitializer.java:41)
at com.blablacompany.app.weight.WeightMilestonesViewBeanUnitTest.setUpMock(WeightMilestonesViewBeanUnitTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:80)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:47)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Unable to load Java agent; please add lib/tools.jar from your JDK to the classpath
at org.powermock.modules.agent.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:97)
at org.powermock.modules.agent.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:70)
at org.powermock.modules.agent.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:40)
at org.powermock.modules.agent.PowerMockAgent.verifyInitialization(PowerMockAgent.java:83)
at org.powermock.modules.agent.PowerMockAgent.instrumentation(PowerMockAgent.java:76)
at org.powermock.modules.agent.PowerMockClassRedefiner.redefine(PowerMockClassRedefiner.java:57)
... 37 more

事实证明,由于某种原因,我的gradle使用JRE的文件夹作为java.home,这就是为什么它无法找到tools.jar的原因。我不认为我想手动将其添加到我的类路径中。我想知道是否有任何方法告诉gradle使用JDK的java home而不是JRE的java home?我还尝试使用gradle.properties文件中的org.gradle.java.home覆盖它,但是它不起作用。任何帮助是极大的赞赏。

当我从我的IDE(Intellij IDEA)运行相同的测试时,所有测试均成功通过。我正在Mac OS上运行所有程序。

println System.getenv("JAVA_HOME")
println System.properties['java.home']

显示:

/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home                                                                                                                                                                
/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre 
ioanbsu

好的,看来JRE实际上是我需要使用的正确的工具。没有理由将java.home设置为JDK。因此,我解决问题的方法就是将工具库添加到我的类路径中:

testCompile ([fileTree(dir: "${System.properties['java.home']}/../lib", include: '*tools.jar'),fileTree(dir: "lib/test", include: '*.jar') ])

最初,我不想这样做的原因是,一旦我添加了它,我就会得到一堆

java 7 errors: java.lang.VerifyError: Expecting a stackmap frame at branch target 10

我确实通过在测试闭包中添加“ -noverify”参数来解决此问题:

Closure basicTestConfiguration = {
jvmArgs "-Dactivemq.directory=${testActivemqDir}",
        "-Duser.timezone=Etc/UTC",
        "-javaagent:${configurations.testAgent.singleFile}",
        "-XX:MaxPermSize=256m",
        "-noverify"
...
}

并将此闭包应用于我的测试套件:

postCommitSuite basicTestConfiguration

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在JRE中找不到Maven Build错误TOOLS.JAR

Ant + Vista 64:“无法找到tools.jar”(jre / jdk冲突?)

对jdk1.7 / jre / lib / rt.jar的访问限制

将JAR从$ HOME / jre / lib / ext移至Gradle时发生JDBC错误

Gradle找不到tools.jar

Gradle找不到tools.jar

STS中的简单Ant构建找不到jdk1.7.0_11 / lib / tools.jar

无法读取/usr/lib/jvm/jdk1.8.0_60/jre/lib/rj.jar proguard netbeans

如何在Gradle JAR类路径构建脚本中包含com.sun.tools JAR并与IDE同步?

运行JAR文件是否同时需要JRE和JDK?

Eclipse Gradle构建“找不到tools.jar”

在Java项目的pom.xml中,我丢失了工件jdk.tools:jdk.tools:jar:1.6错误

您需要使用JDK运行构建或在类路径上具有tools.jar

使jar在32bit jre中运行

使用Eclipse / Maven构建Hadoop-缺少工件jdk.tools:jdk.tools:jar:1.6

Android-无法在JRE上进行编译-确保Gradle在JDK而非JRE上运行

JDK tools.jar作为Maven依赖项

IntelliJ JDK 16抢先体验-是否成功?tools.jar

Gradle中的发布jar

运行 Java Web 服务的最佳选择(基于休息)(JRE/JDK vs Server JRE)

如何安装JRE或JDK在Windows 7上运行Android Developer Tools?

取决于Eclipse中tools.jar(Sun JDK)中的com.sun.javadoc

在JDK中找不到Mule的Maven安装错误com.sun.tools.jar

JDK随附的JRE与独立JRE

在Java \ jre7 \ lib \ security下更新JAR库

使用JDK和/或JRE提供的工具,是否可以查看给定JAR的清单文件?

Jar依赖中的Gradle NoClassDefFoundError

在Gradle 5中的Jar任务

如何从与当前项目的JRE不同的JRE上的库jar中执行方法

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档