2012-08-14 8 views
19

stavo cercando di usare JMockit all'unità testare il mio progetto e ottenuto il seguente errore:JMockit: biblioteca nativo per Attaccare API non disponibile in questo errore 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 

Ho incluso JDK6/lib/tools.jar , jmockit.jar e junit.jar nel classpath, rispettivamente. Qualche indizio sul perché questo sta accadendo?

+0

Possibile duplicato di [ERRORE JMockit - Libreria nativa per Attach API non disponibile in questo JRE] (http://stackoverflow.com/questions/24868592/jmockit-error-native-library-for-attach-api-not- available-in-this-jre) –

risposta

37

Vai Java Build Path del progetto e cambiare la JRE Sistema Bibliotecario e fare punti al JDK invece di JRE.

6

Non è il tools.jar necessario, ma il file della libreria nativa per "Attach API": attach.dll (o l'equivalente Linux/Mac, attach.so o simile). Un JRE semplice non contiene questa libreria. Invece, puntare Eclipse su un'installazione JDK, che dovrebbe contenere il file jre/bin/attach.dll.

+0

Grazie. Ma come indichi Eclipse a un'installazione JDK? Ho provato Window-> Java-> Installed JREs-> add-> directory di jdk. Ma quello non ha aiutato. –

+1

L'utilizzo di JDK invece di JRE funziona per me. Grazie. –

+0

Questo ha funzionato anche per me. – Abi

6

aggiungere il percorso attach.dll alla variabile d'ambiente PATH

+9

Questa risposta è corretta nel senso che "funziona", ma la causa principale è l'uso di jre invece di jdk. La risposta accettata dovrebbe essere l'altra. –

4

È necessario impostare l'agente. È possibile impostare gli argomenti VM se si utilizza Eclipse e Args sarà così:

-javaagent: percorso locale per la vostra JMockit barattolo \ jmockit.jar

esempio: -javaagent: D: \ jmockit.jar

2

Dao Lam, Qui ci sono alcune altre cose da provare:

  • assicurarsi che il progetto sta utilizzando:
    • Il workspa ce default (Ciò presuppone che l'impostazione predefinita sia l'installazione jdk appena aggiunta. Dalla finestra in cui l'hai aggiunto, assicurati che sia selezionato.),
    • La versione jdk, o
    • Un ambiente di esecuzione che utilizza la versione jdk.
  • Estrarre le variabili di ambiente del sistema e aggiungervi il percorso: (jdk_dir)/jre/bin. (Ricorda, dovrai riavviare Eclipse dopo averlo salvato per ottenerlo).
  • Chiudere eclissi e modificare il collegamento in uso per avviarlo (jdk_dir)/jre/bin.

Ho trovato che una di queste misure consentirà a Eclipse di trovare attach.dll.

0

Ho trovato questo problema con JDK 1.8.45 e 1.8.80 su Windows 64-bit. La mia soluzione era copiare attach.dll dalla directory ./jre/bin del JDK al file ./bin. Ciò ha eliminato la necessità di aggiornare Eclipse e una riga di comando Cygwin con una JAVA_HOME non standard.

Forse la versione di Windows potrebbe ignorare il contenuto della directory JRE?

+0

Questo non sarebbe d'aiuto se si tenta di compilare su un'altra macchina. – MKorsch

1

Sembra che sia necessario puntare Eclipse a JDK, non a JRE.

Passi: Windows-> Preferenze> Java> "JRE installato" e rimuovere JRE dalla finestra "JRE installato" e aggiungere la navigazione JDK al percorso JDK e selezionare come predefinito.

Problemi correlati