Biên dịch mã Java 7 qua Maven


155

Danh sách tập tin pom của tôi

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Tuy nhiên mvn clean install, tôi nhận được

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -versionlà ( which javađiểm ở đây)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac cũng trỏ đến phiên bản Java chính xác

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

Trên máy này, tôi đang sử dụng zsh( echo $0trả về -zsh)

Trong tôi .zshrc, tôi đã xác định:

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Khi tôi đang chạy mvn clean install --debugtôi thấy rằng trên thực tế tôi sử dụng Java 6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Nó có thể được định nghĩa ở đâu? Tôi có nguồn (d) .zshrc của tôi nhiều lần.


2
PATH của bạn không có /usr/binđầu tiên trong danh sách các thư mục. Hãy thử javac -versionmà không chỉ định một thư mục.
Peter Lawrey

@PeterLawrey, tôi hiểujavac 1.7.0_10
James Raitsev

2
Điều gì echo $JAVA_HOMEnói với bạn?
Andrew Logvinov

2
Còn biến JAVA_HOME của bạn thì sao? mvn sẽ sử dụng JAVA_HOME. Ngoài ra, bạn đang xây dựng từ dòng lệnh hoặc bên trong IDE?
Lucas

8
Nếu bạn chạy Maven với --debug, nó sẽ cho bạn biết dòng lệnh chính xác mà nó đang sử dụng để chạy javac(cùng với hàng tấn công cụ khác). Nó nói gì?
Emil Ngồi

Câu trả lời:


153

Kiểm tra mvntập lệnh trong bản cài đặt maven của bạn để xem cách xây dựng lệnh. Có lẽ bạn hoặc ai đó đã mã hóa cứng JAVA_HOMEtrong đó và quên nó đi.


8
Bạn là người chiến thắng. Thật vậy, có ai đó đã mã hóa JAVA_HOME trong tập lệnh! CẢM ƠN BẠN
James Raitsev

21
Heh, không phải là tôi đã từng làm điều đó với bản thân mình trước đây hay bất cứ điều gì ... :)
Ryan Stewart

4
Các mvnkịch bản là không tương thích với cài đặt OSX của tôi về Oracle JDK 7, và tôi đã không làm bất cứ điều gì ưa thích cài đặt nó lên (ngoại hình kịch bản cho một thư mục Library/Java/JavaVirtualMachines/CurrentJDKmà không tồn tại đối với tôi (những gì đã tồn tại là jdk1.7.0_25.jdkthay vì CurrentJDK). Không một bản sửa lỗi trang nhã nhưng tôi chỉ mã hóa xuất và bây giờ nó hoạt động (PS: maven trên OSX đang hoạt động /usr/share/maven/bin/mvn)
Raekye

6
Mavericks OSX 1.9.2, với maven được cài đặt qua homebrew, tập lệnh mvn được đặt tại/usr/local/bin/mvn
StackExchange What The Heck

1
Tôi đã có một bộ JAVA_HOME và điều này đã cho manh mối. CẢM ƠN!! : D
Alfonso Nishikawa

109

hãy thử sử dụng phiên bản mới hơn của trình biên dịch maven:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

Ngoài ra, việc chỉ định mã hóa tệp nguồn trong maven được thực hiện tốt hơn trên toàn cầu:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

EDIT : Vì câu trả lời này vẫn đang được chú ý, tôi chỉ muốn chỉ ra rằng các giá trị mới nhất (kể từ lần chỉnh sửa mới nhất) là 3,2 cho plugin trình biên dịch maven và 1,8 cho java, vì các câu hỏi về việc biên dịch mã java 8 qua maven bị ràng buộc với xuất hiện sớm :-)


Thêm "<phiên bản> 3.0 </ version>" đã khắc phục sự cố.
Sriram 27/12/13

@radai, bây giờ là 3.2, nhưng thật ngớ ngẩn khi tiếp tục cập nhật vì nó sẽ không bao giờ ngừng tăng ...
Lucas

@Lucas - chỉ không muốn chịu trách nhiệm cho những người dính vào các phiên bản lỗi thời, là tất cả. không thể sống với chính mình :-)
radai

Tại sao câu trả lời này có gần một trăm câu trả lời khi nó không phải là giải pháp chính xác cho câu hỏi được đặt ra? Tôi bị lạc ...
Zero3

48

Tôi đã có cùng một vấn đề và để giải quyết vấn đề này, tôi theo dõi bài viết trên blog này: http://www.mkyong.com/java/how-to-set-java_home-en môi-variable-on-mac-os-x /

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

tks đặc biệt để @mkyong

EDIT: Bây giờ tôi đang sử dụng: jEnv + sdkman


3
Điều này làm việc cho tôi. Tôi đang sử dụng máy mac, với maven từ macports và sun jdk. Rõ ràng là combo đó là khó khăn.
Quantum7

1
Công việc tuyệt vời Cảm ơn bạn cho tất cả các lệnh! Hoạt động ngay bây giờ trên Maveriks
Maksim

1
Đây là giải pháp dễ dàng và thanh lịch nhất. Cảm ơn bạn!
BK-

26

Vui lòng kiểm tra pom.xml của bạn để biết các thẻ bên dưới

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

cần chỉ ra phiên bản jdk cần thiết


19

Bạn phải kiểm tra phiên bản Maven:

mvn -version

Bạn sẽ tìm thấy phiên bản Java mà Maven sử dụng để biên dịch. Bạn có thể cần đặt lại JAVA_HOME nếu cần.


19

Tôi đã từng gặp vấn đề tương tự. Tôi thấy rằng điều này là do tập lệnh Maven nhìn vào liên kết CurrentJDK bên dưới và tìm thấy một JDK 1.6. Ngay cả khi bạn cài đặt JDK mới nhất, điều này vẫn không được giải quyết. Mặc dù bạn chỉ có thể đặt JAVA_HOME trong tập lệnh $ HOME / .bash_profile của mình, tôi đã chọn sửa liên kết tượng trưng thay vì như sau:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Lưu ý rằng điểm hiện tạiJDK tại 1.6.0.jdk

Để khắc phục, tôi đã chạy các lệnh sau (bạn nên kiểm tra phiên bản đã cài đặt và điều chỉnh cho phù hợp).

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Nếu mvn sạch cài đặt -debug hiển thị java 1.6 thì đây là câu trả lời đúng
cetnar

4

Chẩn đoán:

Bạn có thể xem Maven sử dụng phiên bản java nào bằng cách chạy "mvn --version"

Giải pháp cho Debian:

Tập lệnh mvn đặt biến JAVA_HOME env bên trong bằng cách tìm kiếm javac (javac). Do đó, nếu bạn có nhiều phiên bản java được cài đặt đồng thời, ví dụ JDK 6 và JDK 7 và sử dụng hệ thống Giải pháp thay thế Debian để chọn giữa chúng, mặc dù bạn đã thay đổi thay thế cho "java" thành JDK 7, mvn vẫn sẽ sử dụng JDK 6. Bạn cũng phải thay đổi thay thế cho "javac". Ví dụ:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

BIÊN TẬP:

Trên thực tế, một giải pháp thậm chí tốt hơn là sử dụng các lựa chọn thay thế update-java (ví dụ)

# update-java-alternatives -s java-1.7.0-openjdk-amd64

như chi tiết trong https://wiki.debian.org/JavaPackage , bởi vì điều này sẽ thay đổi tất cả các lựa chọn thay thế cho các công cụ Java khác nhau (có hàng tá hoặc hơn).


Cảm ơn, đúng như những gì tôi đang tìm kiếm
ev Shandongen

Cảm ơn, tôi đã bối rối sau khi cài đặt phiên bản java với: update-Alternators --config javac
Leonard Saers

2

Bạn có thể thử một plugin mới hơn không; trên trang web của maven:

<version>3.0</version>

Tôi cũng thấy như sau:

<compilerVersion>1.7</compilerVersion>

Không hoạt động. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
James Raitsev

Tôi đã sử dụng thành công 2.3.2 để biên dịch 1.7 trước ... Nhưng luôn luôn tốt để sử dụng bản mới nhất nếu có thể.
Lucas

Tìm kiếm thêm. Kiểm tra quản lý plugin phụ thuộc của bạn nếu bạn sử dụng đó.
Eggen

Đã thêm <pluginDependency>, cùng một vấn đề
James Raitsev

Nếu đó là một dự án mô-đun, dự án mẹ có thể đáng xem xét. Đây không thể là trường hợp ở đây. Có phải maven đang chạy với java 1.7?
Eggen

2

Cố gắng thay đổi các cài đặt trình biên dịch Java trong Thuộc tính trong Eclipse-

Goto: Preferences-> Java-> Trình biên dịch-> Trình độ tuân thủ trình biên dịch-> 1.7 Áp dụng Ok

Khởi động lại IDE.

Xác nhận cài đặt Trình biên dịch cho dự án- Goto: Thuộc tính dự án-> Trình biên dịch Java-> Bỏ chọn (Sử dụng tuân thủ từ môi trường thực thi 'JavaSE-1.6' trên đường dẫn Xây dựng java.) Và chọn 1.7 từ danh sách thả xuống. (Bỏ qua nếu đã 1.7)

Khởi động lại IDE.

Nếu vẫn còn sự cố- Chạy các trường hợp thử nghiệm riêng lẻ bằng lệnh trong terminal-

mvn -Dtest=<test class name> test

2

Không chắc chắn hệ điều hành đang sử dụng ở đây là gì, nhưng bạn có thể loại bỏ rất nhiều phiên bản java futzing un debian / ub Ubuntu với các bản thay thế update-java để đặt hệ thống jvm mặc định.

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

Để đặt một cái mới, sử dụng:

#> update-java-alternatives -s java-7-oracle

Không cần đặt JAVA_HOME cho hầu hết các ứng dụng.


2

nhấp chuột phải vào dự án của bạn trong nhật thực và mở "Chạy cấu hình" .. kiểm tra phiên bản jre ở đó. đôi khi điều này sẽ không thay đổi theo mặc định trong nhật thực, sau khi thậm chí thay đổi phiên bản trong đường dẫn.


2

Đối với một trình biên dịch cụ thể yêu cầu /etc/alternatives/javaJVM (không mặc định ), hãy xem xét tiền tố mvnlệnh JAVA_HOMEnhư thế này,

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

Ở đây, chúng tôi giả định mặc định là Java 8, trong khi đối với dự án cụ thể, chúng tôi yêu cầu Java 7.


Điều này làm việc tốt nhất với tôi vì sau đó không cần phải thay đổi được thực hiện đối với nguồn của dự án6 được tải xuống từ GIT (hoặc SCM)
jwilleke

Câu trả lời này xứng đáng được nâng cao hơn. Nó giúp tôi biên dịch mã yêu cầu Java 7 trên máy của tôi, mặc định là Java 8 - mà không phải cài đặt và cài đặt lại Java7 và Java 8.
R11G

1

{JAVA_1_4_HOME} / bin / javacyou cũng có thể thử ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>

4
Bạn không nên mã hóa đường dẫn trên bất kỳ mã nào sẽ được chia sẻ.
Jan Segre

@Jan Segre, ok tôi thay đổi nó :)
baybora.oren

0

Ok, tôi cũng tự mình giải quyết vấn đề này. Điều quan trọng hơn là JAVA_HOME của bạn, nếu bạn không có phiên bản thấp hơn hoặc không có phiên bản so với các thuộc tính nguồn / đích từ plugin Maven, bạn sẽ gặp lỗi này.

Hãy chắc chắn để có một phiên bản tốt trong JAVA_HOME của bạn và bao gồm nó trong PATH của bạn.


0

Bạn có thể chỉ định một phiên bản sai của java. java -version (trong thiết bị đầu cuối của bạn) để kiểm tra phiên bản java bạn đang sử dụng. Tới maven-biên dịch-Plugin cho phiên bản trình biên dịch maven mới nhất plugin của bạn có thể xuất hiện như thế này nếu bạn đang sử dụng java 6 và phiên bản mới nhất của trình biên dịch maven plugin là 3.1

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

0

Không có câu trả lời trước nào giải quyết hoàn toàn trường hợp sử dụng của tôi.

Cần phải loại bỏ thư mục đang được xây dựng. Dọn dẹp. Và sau đó cài đặt lại. Trông giống như một vấn đề quyền im lặng.


0

Tôi đã gặp vấn đề này trong IntelliJ IDEA 14 cho đến khi tôi vào menu Tệp -> Cấu trúc dự án, thay đổi SDK dự án thành 1.7 và cấp độ ngôn ngữ dự án thành 7.


0

Tôi gặp vấn đề này khi làm việc với nhật thực, tôi đã phải thay đổi đường dẫn xây dựng của dự án để nó đề cập đến jre 7

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.