Jmockitを使用してプロジェクトの単体テストをしようとしたところ、次のエラーが発生しました。
Java.lang.UnsatisfiedLinkError: no attach in Java.library.path
Java.lang.IllegalStateException: Native library for Attach API not available in this JRE
at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.Java:95)
at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.Java:54)
at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.Java:21)
at mockit.internal.startup.Startup.initializeIfNeeded(Startup.Java:98)
at mockit.internal.startup.Startup.initializeIfPossible(Startup.Java:112)
at org.junit.runner.Runner.<clinit>(Runner.Java:22)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:24)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.Java:33)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.Java:25)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:48)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:38)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:452)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
Caused by: Java.lang.UnsatisfiedLinkError: no attach in Java.library.path
クラスパスにそれぞれjdk6/lib/tools.jar、jmockit.jar、junit.jarを含めました。なぜこれが起こっているのか手がかりはありますか?
プロジェクトのJavaビルドパスに移動してJREシステムライブラリを変更し、jreではなくjdkを指すようにします。
必要なのはtools.jar
ではなく、「Attach API」のネイティブライブラリファイル:attach.dll
(またはLinux/Macの同等物、attach.so
など)。プレーンなJREには、このライブラリは含まれていません。代わりに、jre/bin/attach.dll
ファイルを含むJDKインストールをEclipseに指示します。
Attach.dllへのパスをPATH環境変数に追加します
エージェントを設定する必要があります。 VM引数を設定できます。Eclipseを使用していて、Argsは次のようになります。
-javaagent:jmockit jar\jmockit.jarへのローカルパス
例:-javaagent:D:\ jmockit.jar
EclipseをJREではなくJDKにポイントする必要があるようです。
手順:Windows-> Preferences> Java> "Installed JRE's"からJREを "Installed JRE's"ウィンドウから削除し、JDKをJDKの場所に追加して、デフォルトとして選択します。
Dao Lamさん、他に試してみることがいくつかあります。
私はこれらの手段のいずれかがEclipseがattach.dllを見つけることを可能にすることがわかりました。
64ビットWindows上のJDK 1.8.45および1.8.80でこの問題が見つかりました。私の解決策は、JDKの./jre/binディレクトリから./binにattach.dllをコピーすることでした。これにより、非標準のJava_HOMEでEclipseおよびCygwinコマンドラインを更新する必要がなくなりました。
WindowsバージョンがJREディレクトリの内容を無視しているのではないでしょうか?