2016-03-01 25 views
5

tôi có các cài đặt maven-biên dịch-plugin gói java.lang dưới đây:mvn biên dịch: Không thể tìm

<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> 

Khi thực hiện mvn compile, nó báo cáo Unable to find package java.lang in classpath or bootclasspath. Nhưng tôi tìm java.lang gói trong /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 
...... 

Tôi đang sử dụng Oracle JDK 1.8 trên OS X 10.11.3. Tôi nên cung cấp thêm thông tin gì? Vấn đề từ JDK hay thiết lập maven của dự án?

chỉnh sửa:

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

edit2:

Khác với Maven : unable to find java.lang issue on OS X, Tôi đang sử dụng Oracle JDK

EDIT3:

phiên bản 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 là một liên kết mềm để /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home thể hiện trong thông tin phiên bản maven

+0

không bạn cần phải thiết lập JAVA_HOME? –

+0

@ ObiWan-PallavJha Nó được đặt trong shell: 'export JAVA_HOME =/Library/Java/JavaVirtualMachines/jdk1.8/Nội dung/Home ' – hbprotoss

+0

@ ObiWan-PallavJha Tôi cũng đã thử nguồn và đích với JDK 1.8, cùng một vấn đề – hbprotoss

Trả lời

4

<compilerArguments> bị phản đối, nhưng đó không phải là lý do tại sao nó không làm việc. Các loại đối số này chỉ hoạt động nếu <fork> được đặt thành true.

này làm việc cho tôi:

<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, tại sao nó phải chạy trong một tiến trình riêng biệt? Từ 'mvn compile -X', nó vượt qua' -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' với các tùy chọn dòng lệnh – hbprotoss

+0

Vì nội bộ, Maven sử dụng 'javax.tools.JavaCompiler' theo mặc định và nó sử dụng nó trong tiến trình. Rõ ràng, trình biên dịch này không có nhiều chuông và còi như 'javac', nhưng nó chỉ tốt cho 99% các trường hợp sử dụng của nó. Đối với các trường hợp sử dụng còn lại (giống như của bạn), plugin cho phép bạn sử dụng 'javac' nhưng vì nó không phải là trình biên dịch nó sử dụng _directly_, plugin sẽ thay thế một quá trình. – Daniel

Các vấn đề liên quan