Tại sao Maven sử dụng JDK 1.6 nhưng chuyển đổi java của tôi là 1.7


159

Tôi mới sử dụng maven và MacOS.

Tôi đã thiết lập maven trong thiết bị đầu cuối của mình và khi nhận cài đặt phiên bản (sử dụng mvn -v), có vẻ như nó sử dụng JDK 1.6, trong khi tôi đã cài đặt JDK 1.7. Có gì sai không?

Các lệnh tôi nhập là:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"

2
Bạn có thể đăng các biến PATH và JAVA_HOME của bạn không?
Jeanne Boyarsky

Nhạc blues @JeanneBoyarsky: helloworld Ninja $ echo $ JAVA_HOME nhạc blues: helloworld Ninja $ echo $ PATH / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
Ninja

@JeanneBoyarsky đây có phải là điều bạn muốn không, thưa ông?
Ninja

3
Tôi là nữ (nên gọi tôi là "ngài" là không chính xác) và đúng vậy. Vui lòng thử đặt JAVA_HOME của bạn. Vấn đề của bạn có vẻ tương tự như vấn đề này: stackoverflow.com/questions/13752519/iêu
Jeanne Boyarsky

2
@JeanneBoyarsky Hãy tha thứ cho sự thô lỗ của tôi. Url bạn đưa ra là vấn đề tôi gặp. Cảm ơn rất nhiều ~
Ninja

Câu trả lời:


227

thêm phần sau vào ~/.mavenrc:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

Giải pháp thứ hai:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile


vâng, bạn trả lời là đúng. Yêu cầu JAVAHOME. Tôi chỉnh sửa / etc / profile thay vào đó
Ninja

8
Chà, thêm vào ~ / .mavenrc đảm bảo rằng các ứng dụng khác không bị ảnh hưởng. Chỉ mvn chọn phiên bản JDK này. :)
Gaurav Vaish

43
xuất JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla

1
.mavenrc giải pháp làm việc hoàn hảo cho tôi. Cũng nhận ra tôi chỉ cài đặt JDK 1.8 chứ không phải JRE 1.8. Cảm ơn Gaurav!
timothyclifford

2
Nếu bạn đang sử dụng jenv trên máy mac, nó có thể là: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"cho ~/.mavenrctập tin.
Eddy

46

Nhận được vào

/System/Library/Frameworks/JavaVM.framework/Versions

và cập nhật CurrentJDKliên kết tượng trưng để trỏ đến

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Ví dụ

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

Bây giờ nó sẽ làm việc ngay lập tức.


1
Thủ thuật symlink symJDK dường như không còn hoạt động nữa với maven 3.3.1, nhưng sửa đổi ~ / .mavenrc thì có.
Stefan L

41

Bạn cũng có thể làm

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>

5
Điều đó không hoạt động nếu maven đang chạy bằng java 6. Nó chỉ gặp sự cố với[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey

27

Bạn cũng có thể nói rõ cho maven biết phiên bản java nào sẽ được biên dịch. Bạn có thể thử thêm maven-compiler-pluginpom của bạn.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Nếu bạn đã nhập dự án maven vào IDE, thì có thể có cài đặt maven trong IDE cho trình biên dịch mặc định mà trình chạy maven của bạn đang sử dụng.


Ô! Cảm ơn. nhưng tôi chưa bắt đầu. Tôi chỉ 'mvn -v' ... lý do là tôi không gán JAVA_HOME
Ninja

Lưu ý rằng chỉ ảnh hưởng đến mã của bạn được biên dịch. Tôi gặp vấn đề này và đến đây vì một thư viện bên ngoài tôi đang sử dụng đã được biên dịch cho Java 7 và Maven đang cố chạy nó với Java 6

Điều đó không hoạt động nếu maven đang chạy bằng java 6. Nó chỉ gặp sự cố với[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey

Điều này sẽ hoạt động trong trường hợp cài đặt maven trong IDE của bạn cho trình biên dịch mặc định thấp hơn 1.7, nhưng jdk được cài đặt cao hơn 1.7
John Doe

9

Nó đã giúp đỡ tôi. Chỉ cần thêm nó vào tệp pom.xml của bạn.

Theo mặc định, trình biên dịch maven sử dụng Java 1.5 hoặc 1.6, bạn phải xác định lại nó trong tệp pom.xml của bạn.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

4

Đối với người dùng Eclipse. Nếu bạn có một Cấu hình Run mà gói sạch chẳng hạn.

Trong bảng Cấu hình Run có tab JRE nơi bạn có thể chỉ định thời gian chạy nào sẽ chạy. Lưu ý rằng cấu hình này ghi đè bất cứ thứ gì có trong pom.xml.



2

Vui lòng kiểm tra tính tương thích. Tôi vật lộn với mvn 3.2.1jdk 1.6.0_37trong nhiều giờ. Tất cả các biến đã được đặt nhưng không hoạt động. Cuối cùng tôi nâng cấp jdk to 1.8.0_60mvn 3.3.3và làm việc. Biến môi trường như sau:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;

1

Giải pháp của @MasterGaurav hoàn toàn hiệu quả,

Tôi thường đặt điều chuyển đổi java thành một hàm zsh:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

Sau đó, bạn có thể chạy java_lshai lấy tất cả jvm có sẵn trên máy của mình, chạy java_use 1.7để sử dụng phiên bản 1.7 cho cả java và maven.

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.