2016-03-01 5 views
5

Ich habe Maven-Compiler-Plugin-Einstellungen unten finden:mvn Kompilierung: Kann Paket 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> 

Wenn mvn compile ausgeführt wird, meldet es Unable to find package java.lang in classpath or bootclasspath. Aber ich finde java.lang Paket in /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 
...... 

Ich bin mit Oracle JDK 1.8 auf OS X 10.11.3. Welche zusätzlichen Informationen sollte ich bereitstellen? Ist das Problem von JDK oder Project Maven Einstellung?

edit:

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

edit2:

Anders als bei Maven : unable to find java.lang issue on OS X, ich bin mit Oracle JDK

EDIT3:

Maven Version

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 ist ein Softlink zu /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home in Maven Version info gezeigt

+0

nicht tun Sie JAVA_HOME setzen müssen? –

+0

@ ObiWan-PallavJha Es ist in der Shell festgelegt: 'Export JAVA_HOME =/Bibliothek/Java/JavaVirtualMachines/jdk1.8/Inhalt/Home ' – hbprotoss

+0

@ ObiWan-PallavJha Ich habe auch versucht Quelle und Ziel mit JDK 1.8, das gleiche Problem – hbprotoss

Antwort

4

<compilerArguments> veraltet ist, aber das ist nicht, warum es nicht funktioniert. Diese Arten von Argumenten funktionieren nur, wenn <fork> auf true gesetzt ist.

Dies funktioniert für mich:

<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, warum muss es in einem separaten Prozess laufen? Von 'mvn compile -X' wird' -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/rt.jar;/Library/Java/JavaVirtualMachines/jdk1.8.0 übergeben _60.jdk/Contents/Home/jre/lib/jce.jar' zu den Kommandozeilenoptionen – hbprotoss

+0

Da Maven intern 'javax.tools.JavaCompiler' verwendet, wird es standardmäßig verwendet. Offensichtlich hat dieser Compiler nicht so viele Schnickschnacks wie 'javac', aber er ist für 99% seiner Anwendungsfälle gut geeignet. Für die übrigen Anwendungsfälle (wie Ihres) erlaubt das Plugin die Verwendung von 'javac', da es jedoch nicht der Compiler ist, der _directly_ verwendet, wird das Plugin stattdessen einen Prozess forkieren. – Daniel

Verwandte Themen