本JRE中没有可用于附加API的本机库

时间:2015-07-18 00:34:33

标签: java junit gradle jmock

我正在尝试使用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$1.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 JREjmockit: 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构建的一部分--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\2.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运行java,这是正确的安装。我看了,这个指挥官有javac,我认为它确认它是JDK而不是JRE。

任何输入,明智之上是明智的吗?

1 个答案:

答案 0 :(得分:2)

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