Cách đặt phiên bản java cụ thể thành Maven


162

Trên máy của tôi, tôi có hai phiên bản java được cài đặt: (1.6 và 1.7 được cài đặt thủ công bởi tôi). Tôi cần cả hai cho các dự án khác nhau. Nhưng đối với Maven tôi cần 1.7, bây giờ Maven của tôi sử dụng 1.6 phiên bản java, làm cách nào tôi có thể đặt Maven sử dụng 1.7?


Tôi không thể xuất JAVA_HOME với java 1.7 vì tôi không thể chạm vào cấu hình của máy, phiên bản mặc định của Java phải là 1.6.
andPat

Maven sử dụng JAVA_HOME vì vậy đừng nghĩ những gì bạn muốn làm là có thể mà không thay đổi giá trị JAVA_HOME.
Zyga

1
Bạn đang sử dụng một IDE hoặc dòng lệnh? Bạn đang ở trên * nix hay windows?
xwoker

1
Liệu câu trả lời này bao gồm những gì bạn muốn? stackoverflow.com/a/4724062/1570834
DB5

Có rất hữu ích nhưng tôi không thể làm chnges để pom của dự án, tuy nhiên công cụ này là giống nhau và câu trả lời là đúng
andPat

Câu trả lời:


137

Maven sử dụng JAVA_HOMEtham số để tìm phiên bản Java nào được cho là chạy. Tôi thấy từ nhận xét của bạn rằng bạn không thể thay đổi điều đó trong cấu hình.

  • Bạn có thể đặt JAVA_HOMEtham số ngay trước khi bắt đầu maven (và thay đổi lại sau đó nếu cần).
  • Bạn cũng có thể đi vào mvn(không phải windows) / mvn.bat/ mvn.cmd(windows) và đặt phiên bản java của bạn một cách rõ ràng ở đó.

29
@andPat: vậy sao? Bạn có thể thiết lập JAVA_HOMEtrong vỏ cục bộ của mình mà không thay đổi cấu hình của máy (ngay khi bạn đóng vỏ đó, thay đổi sẽ biến mất). Bạn thậm chí có thể thay đổi nó cho một lệnh duy nhất:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer

@JoachimSauer: Vâng, nhưng tôi cũng đã tham chiếu đến mvn.bat, cụ thể là Windows.
DanielBarbarian

Trên mac, bạn có thể tạo tệp .mavenrc với JAVA_HOME bên trong
Ronan Quillevere

Cũ, nhưng ném vào 2cents của tôi. Tôi đang làm việc trên một dịch vụ Java 8 được gọi bởi ứng dụng Java 7. Để tránh phải chuyển đổi liên tục khi xây dựng, tôi (trên windows) đã tạo biến môi trường MVN_JAVA_HOME, sau đó thay thế mọi lần xuất hiện của JAVA_HOME bằng MVN_JAVA_HOME bên trong mvn và mvn.cmd.
ryanlutgen

74

Trong POM, bạn có thể đặt các thuộc tính của trình biên dịch, ví dụ: 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

9
Kể từ phiên bản trình biên dịch-plugin 3.7.0, các giá trị mặc định cho nguồn và đích nếu không được chỉ định là 1,5
vương miện

58

Thêm giải pháp cho những người đã cài đặt nhiều phiên bản Java

Chúng tôi có một cơ sở mã lớn, hầu hết trong số đó là trong Java. Phần lớn những gì tôi làm việc được viết bằng Java 1.7 hoặc 1.8. Vì JAVA_HOMElà tĩnh, tôi đã tạo các bí danh .bashrcđể chạy Maven với các giá trị khác nhau:

alias mvn5="JAVA_HOME=/usr/local/java5 && mvn"
alias mvn6="JAVA_HOME=/usr/local/java6 && mvn"
alias mvn7="JAVA_HOME=/usr/local/java7 && mvn"
alias mvn8="JAVA_HOME=/usr/local/java8 && mvn"

Điều này cho phép tôi chạy Maven từ dòng lệnh trên máy phát triển của mình bất kể phiên bản JDK được sử dụng trong dự án.


2
Trừ khi bạn cần maven 2 và 3 cho các dự án khác nhau, trong trường hợp đó bạn đã có mvn2mvn3xác định và việc đặt tên trở nên hơi thú vị khi các phiên bản Java cũng xuất hiện ...: D
Tomislav Nakic-Alfirevic 17/1/19

3
Nếu bạn đang sử dụng một máy Mac, JDK của bạn đi kèm với JAVA_HOME lệnh để bạn có thể tránh đường dẫn hardcoding, ví dụ:alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
Trên (ubfox + bash), bạn phải bỏ qua phần &&trước mvn. mvn không thấy giá trị của JAVA_HOME với &&.
Fabien

@Fabien tốt để biết; Tôi sử dụng ZSH và không biết về sự khác biệt của Bash
Jonathan Landrum

47

Trên cửa sổ

Nếu bạn không muốn thay đổi JAVA_HOMEbiến của mình bên trong các biến hệ thống.

Chỉnh sửa mvn.battập tin của bạn và thêm một dòng như thế này

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

Điều này có thể được thực hiện sau khi được @REM ==== START VALIDATION ====đề cập bởi @Jonathan

Trên máy Mac (& Linux?)

Nếu bạn không muốn thay đổi JAVA_HOMEbiến của bạn bên trong ~/.bashrchoặc~/.bash_profile

bạn có thể tạo một ~/.mavenrctệp và xác định lại JAVA_HOMEbằng cách sử dụng công cụ java_home

export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

Kiểm tra sự tỉnh táo

Bạn có thể xác minh rằng mọi thứ đều hoạt động tốt bằng cách thực hiện các lệnh sau. Phiên bản jdk nên khác nhau.

mvn -version

sau đó

java -version


Tôi đặt nó để đặt JAVA_HOME = C: \ Files Files \ Java \ jdk1.7.0_45 loại trừ thư mục con jre.
nanosoft

32

Thêm hai xu của tôi và cung cấp giải pháp rõ ràng.

Tôi có hai JDK được cài đặt trên Windows Machine của mình - JDK 1.5JDK 1.6.

Mặc định của tôi (và được đặt thành biến môi trường hệ thống windows) JAVA_HOMEđược đặt thành JDK 1.5.

Tuy nhiên, tôi có một dự án maven mà tôi cần xây dựng (ví dụ, Etsy.com của JBehave Tutorial ) JDK 1.6.

Giải pháp của tôi trong kịch bản này (đã hoạt động!), Như được đề xuất bằng cách @DanielBarbarianđặt nó vào mvn.bat.

Đối với một số người không quen thuộc với tệp bó của cửa sổ, về cơ bản tôi chỉ cần thêm set JAVA_HOME=<path_to_other_jdk>dòng sau @REM ==== START VALIDATION ====trong mvn.bat(nghĩa là %MAVEN_HOME%\bin\mvn.bat):

@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome

4
Trong maven 3.5, mvn.batđược đổi tên thành mvn.cmd.
CKM

30

Tôi mới gần đây, sau bảy năm dài với Maven, đã tìm hiểu về toolchains.xml. Maven thậm chí còn ghi lại và hỗ trợ nó từ 2.0.9 - tài liệu về công cụ

Vì vậy, tôi đã thêm một tệp toolchain.xml vào thư mục ~ / .m2 / của mình với nội dung sau:

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

Nó cho phép bạn xác định những JDK khác nhau mà Maven có thể sử dụng để xây dựng dự án bất kể JDK Maven chạy với. Sắp xếp giống như khi bạn định nghĩa JDK ở cấp dự án trong IDE.


2
Câu trả lời tốt nhất ,! Cảm ơn. Điều này giải thích một tình huống rõ ràng khi chúng tôi muốn chạy Maven và dự án được biên dịch với hai thời gian chạy / khung java khác nhau.
Soundararajan

5

Một giải pháp đơn giản cho vấn đề -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn cài đặt sạch

Trên Mac, nó sẽ trông giống như -

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Nội dung / Trang chủ / mvn cài đặt sạch

PS: Một trường hợp đặc biệt mà tôi tìm thấy là lệnh đã cho ở trên không hoạt động trên vỏ 'cá'. Tôi cũng đã có bash shell và nó hoạt động tốt ở đó. chỉ cần sử dụng lệnh 'bash' để chuyển sang bash shell.


5

Bạn có thể định cấu hình các nguồn biên dịch bằng cách sử dụng JDK khác nhau với maven-compiler-plugin.

Chỉ cần xác định đường dẫn đến javactrong <executable>thẻ. Ví dụ: đối với java11, nó trông giống như:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>

4

Để tránh mọi tác động đến dự án của bạn và Biến môi trường, bạn có thể định cấu hình Trình cắm trình biên dịch Maven chỉ với POM của dự án, chỉ định phiên bản java Nguồn và đích

  <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    ...
  </plugins>

4

Bạn có thể đặt Maven để sử dụng bất kỳ phiên bản java nào theo hướng dẫn bên dưới.

Cài đặt jenv trong liên kết máy của bạn

Kiểm tra các phiên bản java có sẵn được cài đặt trong máy của bạn bằng cách phát lệnh sau trong dòng lệnh.

phiên bản jenv

Bạn có thể chỉ định phiên bản Java toàn cầu bằng cách sử dụng lệnh sau.

jenv toàn cầu orc64-1.6.0.39

Bạn có thể chỉ định phiên bản Java cục bộ cho bất kỳ thư mục (Project) nào bằng cách sử dụng lệnh sau trong thư mục trong dòng lệnh.

jenv orory64-1.7.0.11

thêm phiên bản java chính xác trong tệp pom.xml của bạn

Nếu bạn đang chạy maven trong dòng lệnh, hãy cài đặt plugin jenv maven bằng lệnh bên dưới

jenv enable-plugin maven

Bây giờ bạn có thể định cấu hình bất kỳ phiên bản java nào trong máy của mình cho bất kỳ dự án nào mà không gặp sự cố nào.


1
thích tùy chọn này. jenv giống như virtualenv cho trăn
Jesse Zhuang

4

Trên máy Mac, (giả sử bạn đã cài đặt đúng phiên bản)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


4

Không thay đổi Biến môi trường, Bạn có thể quản lý phiên bản java dựa trên cấp độ dự án bằng cách sử dụng Trình biên dịch Maven.

Phương pháp 1

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Cách 2

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

2

Trên windows, tôi chỉ cần thêm nhiều tệp bó cho các phiên bản JDK khác nhau vào thư mục bin Maven như thế này:

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

sau đó bạn có thể sử dụng mvn11để chạy Maven trong JDK được chỉ định.



1

Tôi không thành công trên mac khi chỉ cài đặt JAVA_HOMEtrong bảng điều khiển nhưng tôi đã thành công với phương pháp này

  • Tạo tệp .mavenrc tại thư mục chính của bạn (vì vậy tệp sẽ đường dẫn sẽ là ~/.mavenrc
  • Vào tập tin đó dán export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

Ngoài ra, bạn có thể cài đặt hai phiên bản maven và chỉnh sửa một trong số chúng, chỉnh sửa tại đây:

mvn (không phải cửa sổ) /mvn.bat/mvn.cmd (cửa sổ)

thay thế% java_home% xuất hiện của bạn vào đường dẫn java mong muốn của bạn. Sau đó, chỉ cần thực hiện maven từ đường dẫn sửa đổi đó

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.