用于附加 API 的本机库在此 JRE 中不可用

native library for attach API not available in this JRE

我正在尝试使用 gradle、junit 和 jmock 构建一个新项目。当我 运行 我的构建时,我得到这个堆栈跟踪:

com.heavyweightsoftware.daybook.ws.TypeCodeWsTest STANDARD_ERROR
    java.lang.IllegalStateException: Native library for Attach API not available
 in this JRE
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.ru
nTestClass(JUnitTestClassExecuter.java:80)
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.ex
ecute(JUnitTestClassExecuter.java:49)
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.p
rocessTestClass(JUnitTestClassProcessor.java:64)
        at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.process
TestClass(SuiteTestClassProcessor.java:50)
        at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionD
ispatch.java:35)
        at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionD
ispatch.java:24)
        at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(Con
textClassLoaderDispatch.java:32)
        at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocat
ionHandler.invoke(ProxyDispatchAdapter.java:93)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestCl
ass(TestWorker.java:106)
        at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionD
ispatch.java:35)
        at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionD
ispatch.java:24)
        at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(Messa
geHub.java:360)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.
onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl.run(StoppableE
xecutorImpl.java:40)
    Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path
        ... 14 more
Gradle Test Executor 1 finished executing tests.

com.heavyweightsoftware.daybook.ws.TypeCodeWsTest > testGetTypeCodes FAILED
    java.lang.ExceptionInInitializerError
        at com.heavyweightsoftware.daybook.ws.TypeCodeWsTest.testGetTypeCodes(Ty
peCodeWsTest.java:40)

        Caused by:
        java.lang.IllegalStateException: Native library for Attach API not avail
able in this JRE
            at mockit.internal.startup.AgentLoader.getVirtualMachineImplementati
onFromEmbeddedOnes(AgentLoader.java:78)
            at mockit.internal.startup.AgentLoader.loadAgent(AgentLoader.java:46
)
            at mockit.internal.startup.Startup.verifyInitialization(Startup.java
:172)
            at mockit.Invocations.<clinit>(Invocations.java:26)
            ... 1 more

            Caused by:
            java.lang.NoClassDefFoundError: Could not initialize class sun.tools
.attach.WindowsVirtualMachine
                at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method)
                at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
 Source)
                at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unk
nown Source)
                at java.lang.reflect.Constructor.newInstance(Unknown Source)
                at mockit.internal.startup.AgentLoader.getVirtualMachineImplemen
tationFromEmbeddedOnes(AgentLoader.java:70)
                ... 4 more

所以我查看并发现了这些问题:JMockit ERROR - Native library for Attach API not available in this JRE and jmockit: Native library for Attach API not available in this JRE error

并且我已经在 eclipse 中进行了更改,但是即使 运行在 eclipse 之外时也会发生此错误,因此它不是 eclipse 设置。

这是命令提示符下 java -version 的输出:

C:\Users\thom\git\daybook\WebServices>java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

这是 gradle build --info:

的一部分
Executing task ':test' (up-to-date check took 0.193 secs) due to:
  Value of input property 'candidateClassFiles' has changed for task ':test'
Starting process 'Gradle Test Executor 1'. Working directory: C:\Users\thom\git\
daybook\WebServices Command: C:\java\bin\java.exe -Djava.security.manager=jarjar
.org.gradle.process.internal.child.BootstrapSecurityManager -Dfile.encoding=wind
ows-1252 -Duser.country=US -Duser.language=en -Duser.variant -ea -cp C:\Users\th
om\.gradle\caches.4\workerMain\gradle-worker.jar jarjar.org.gradle.process.int
ernal.launcher.GradleWorkerMain 'Gradle Test Executor 1'
Successfully started process 'Gradle Test Executor 1'
Gradle Test Executor 1 started executing tests.

这告诉我它是来自 c:\java\bin 的 运行ning java,这是正确的安装。我看了看,这个导演里面有 javac,我认为这证实了它是 JDK 而不是 JRE。

任何输入,哦明智的以上明智?

我将 c:\java\jre\bin 添加到我的路径中,构建再次开始工作。