2016-03-01 11 views
5

ho impostazioni Maven-compiler-plug di seguito:mvn di compilazione: Impossibile trovare il pacchetto java.lang

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
     <compilerArguments> 
      <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath> 
     </compilerArguments> 
    </configuration> 
</plugin> 

Durante l'esecuzione di mvn compile, segnala Unable to find package java.lang in classpath or bootclasspath. Ma lo faccio trovare java.lang pacchetto /Library/Java/JavaVirtualMachines/jdk1.8/Contents/Home/jre/lib/rt.jar:

java/lang/Thread$UncaughtExceptionHandler.class 
java/lang/ThreadGroup.class 
java/lang/Runnable.class 
java/lang/Thread.class 
java/lang/ref/Finalizer.class 
java/lang/ref/PhantomReference.class 
java/lang/ref/FinalReference.class 
java/lang/ref/WeakReference.class 
java/lang/ref/SoftReference.class 
java/lang/ref/Reference.class 
...... 

Sto utilizzando Oracle JDK 1.8 su OS X 10.11.3. Quali informazioni extra dovrei fornire? Il problema è causato da JDK o dall'impostazione di Maven del progetto?

edit:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8/Contents/Home 

EDIT2:

Diverso da Maven : unable to find java.lang issue on OS X, sto usando Oracle JDK

Edit3:

versione Maven

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) 
Maven home: /usr/local/Cellar/maven/3.3.9/libexec 
Java version: 1.8.0_60, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "mac os x", version: "10.11.3", arch: "x86_64", family: "mac" 

/Library/Java/JavaVirtualMachines/jdk1.8/Contents/Home è un link simbolico a /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home mostrato nella versione Maven informazioni

+0

non lo fanno è necessario impostare JAVA_HOME? –

+0

@ ObiWan-PallavJha È impostato nella shell: 'export JAVA_HOME =/Libreria/Java/JavaVirtualMachines/jdk1.8/Contents/Home ' – hbprotoss

+0

@ ObiWan-PallavJha Ho anche provato sorgente e destinazione con JDK 1.8, stesso problema – hbprotoss

risposta

4

<compilerArguments> è deprecato, ma non è per questo che non funziona. Questi tipi di argomenti funzionano solo se <fork> è impostato su true.

questo funziona per me:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <source>1.8</source> 
    <target>1.8</target> 
    <fork>true</fork> 
    <compilerArgs> 
     <arg>-bootclasspath</arg> 
     <arg>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar</arg> 
    </compilerArgs> 
    </configuration> 
</plugin> 
+0

BTW, perché deve essere eseguito in un processo separato? Da 'mvn compile -X', passa' -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/rt.jar;/Library/Java/JavaVirtualMachines/jdk1.8.0 _60.jdk/Contents/Home/jre/lib/jce.jar' alle opzioni della riga di comando – hbprotoss

+0

Perché internamente, Maven usa 'javax.tools.JavaCompiler' per impostazione predefinita e lo utilizza in-process. Ovviamente, questo compilatore non ha tanti campanelli e fischietti come 'javac', ma funziona bene per il 99% dei suoi casi d'uso. Per i casi d'uso rimanenti (come il tuo), il plugin ti permette di usare 'javac' ma dal momento che non è il compilatore che usa _directly_, il plugin forgerà invece un processo. – Daniel