web-dev-qa-db-ja.com

jmockit:このJREエラーでは、Attach APIのネイティブライブラリは使用できません

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を含めました。なぜこれが起こっているのか手がかりはありますか?

23
Dao Lam

プロジェクトのJavaビルドパスに移動してJREシステムライブラリを変更し、jreではなくjdkを指すようにします。

48
Mahmoud Saleh

必要なのはtools.jarではなく、「Attach API」のネイティブライブラリファイル:attach.dll(またはLinux/Macの同等物、attach.soなど)。プレーンなJREには、このライブラリは含まれていません。代わりに、jre/bin/attach.dllファイルを含むJDKインストールをEclipseに指示します。

9
Rogério

Attach.dllへのパスをPATH環境変数に追加します

7
savedme

エージェントを設定する必要があります。 VM引数を設定できます。Eclipseを使用していて、Argsは次のようになります。

-javaagent:jmockit jar\jmockit.jarへのローカルパス

例:-javaagent:D:\ jmockit.jar

4
sasuke

EclipseをJREではなくJDKにポイントする必要があるようです。

手順:Windows-> Preferences> Java> "Installed JRE's"からJREを "Installed JRE's"ウィンドウから削除し、JDKをJDKの場所に追加して、デフォルトとして選択します。

2
supernova

Dao Lamさん、他に試してみることがいくつかあります。

  • プロジェクトが次のいずれかを使用していることを確認してください:
    • ワークスペースのデフォルト(デフォルトは、追加したjdkインストールであると想定しています。追加したウィンドウで、チェックされていることを確認してください。)、
    • Jdkバージョン、または
    • Jdkバージョンを使用する実行環境。
  • システムの環境変数を取得し、次のパスを追加します:(jdk_dir)/ jre/bin。 (保存するには、Eclipseを再起動する必要があります)。
  • Eclipseを閉じ、起動に使用しているショートカットを(jdk_dir)/ jre/binに変更します。

私はこれらの手段のいずれかがEclipseがattach.dllを見つけることを可能にすることがわかりました。

2
jchess

64ビットWindows上のJDK 1.8.45および1.8.80でこの問題が見つかりました。私の解決策は、JDKの./jre/binディレクトリから./binにattach.dllをコピーすることでした。これにより、非標準のJava_HOMEでEclipseおよびCygwinコマンドラインを更新する必要がなくなりました。

WindowsバージョンがJREディレクトリの内容を無視しているのではないでしょうか?

0
user5601840