2012-08-14 1 views
19

Я пытался использовать JMockit для модульного тестирования мой проект и получил следующее сообщение об ошибке:JMockit: Native библиотека для Attach API не доступны в этой ошибке JRE

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/Библиотека/tools.jar , jmockit.jar и junit.jar в пути к классам, соответственно. Какие-нибудь подсказки, почему это происходит?

+0

Возможный дубликат [JMockit ERROR - Нативная библиотека для API присоединения недоступна в этой JRE] (http://stackoverflow.com/questions/24868592/jmockit-error-native-library-for-attach-api-not- доступно-в-этом-jre) –

ответ

37

Перейти к Java Построить путь вашего проекта и изменить JRE System Library и сделать это указывает на JDK вместо JRE.

6

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

+0

Спасибо. Но как вы указываете Eclipse на установку JDK? Я попробовал Window-> Java-> Установил JREs-> add-> каталог jdk. Но это не помогло. –

+1

Использование JDK вместо JRE работает для меня. Благодарю. –

+0

Это сработало и для меня. – Abi

6

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

+9

Этот ответ верен в том смысле, что «он работает», но основной причиной является использование jre вместо jdk. Принятый ответ должен быть другим. –

4

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

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

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

2

Dao Lam, Вот некоторые другие вещи, чтобы попробовать:

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

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

0

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

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

+0

Это не поможет, если вы попытаетесь скомпилировать на другой машине. – MKorsch

1

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

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