Jmockit: Исходная библиотека для Attach API недоступна в этой ошибке JRE

Я пытался использовать jmockit для unit test моего проекта и получил следующую ошибку:

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 в путь к классам, соответственно. Любые подсказки, почему это происходит?

Ответ 1

Перейдите в путь сборки Java вашего проекта и измените JRE System Library и укажите, что он указывает на jdk вместо jre.

Ответ 2

Это не tools.jar, что вам нужно, но файл собственной библиотеки для "Attach API": attach.dll (или эквивалент Linux/Mac, attach.so или аналогичный). Простая JRE не содержит эту библиотеку. Вместо этого укажите Eclipse на установку JDK, которая должна содержать файл jre/bin/attach.dll.

Ответ 3

Добавьте путь к attach.dll в переменную среды PATH

Ответ 4

Вам нужно установить агент. Вы можете установить аргументы VM, если вы используете eclipse, и Args будет выглядеть следующим образом:

-javaagent: локальный путь к jmockit jar\jmockit.jar

например: -javaagent: D:\jmockit.jar

Ответ 5

Дао Лам, Вот несколько других вещей, которые можно попробовать:

  • Убедитесь, что ваш проект использует:
    • Рабочая область по умолчанию (Предположим, что по умолчанию это ваша установка jdk, которую вы только что добавили. Из окна, где вы ее добавили, убедитесь, что она отмечена.),
    • Версия jdk или
    • Среда выполнения, использующая версию jdk.
  • Поднимите переменные системной среды и добавьте к ней этот путь: (jdk_dir)/jre/bin. (Помните, что вам придется перезапустить Eclipse после того, как вы сохранили это, чтобы заставить его заняться).
  • Закройте eclipse и измените ярлык, который вы используете, чтобы запустить его (jdk_dir)/jre/bin.

Я обнаружил, что любая из этих мер позволит Eclipse найти файл attach.dll.

Ответ 6

Похоже, вам нужно указать ваше Eclipse на JDK, а не JRE.

Шаги: Windows- > Настройки > Java > "Установленные JRE" и удалите JRE из окна "Установленные JRE" и добавьте JDK-просмотр в ваше местоположение JDK и выберите по умолчанию.

Ответ 7

Я нашел эту проблему с JDK 1.8.45 и 1.8.80 на 64-битной Windows. Моим решением было скопировать файл attach.dll из каталога JDK./jre/bin в. /bin. Это устранило необходимость обновления Eclipse и командной строки Cygwin с нестандартным JAVA_HOME.

Возможно, версия Windows может игнорировать содержимое каталога JRE?