วิธีตั้งค่าจาวาเวอร์ชันเฉพาะเป็น Maven


165

บนเครื่องของฉันฉันมีสองรุ่นจาวาติดตั้ง: (1.6 และ 1.7 ติดตั้งด้วยตนเองโดยฉัน) ฉันต้องการทั้งคู่สำหรับโครงการต่าง ๆ แต่สำหรับ Maven ฉันต้องการ 1.7 ตอนนี้ Maven ของฉันใช้เวอร์ชัน 1.6 java ฉันจะตั้งค่า Maven ให้ใช้ 1.7 ได้อย่างไร


ฉันไม่สามารถส่งออก JAVA_HOME ด้วย java 1.7 ได้เพราะฉันไม่สามารถสัมผัสการกำหนดค่าของเครื่องได้ Java รุ่นเริ่มต้นต้องเป็น 1.6
andPat

Maven ใช้ JAVA_HOME ดังนั้นอย่าคิดว่าสิ่งที่คุณต้องการทำนั้นเป็นไปได้โดยไม่เปลี่ยนค่า JAVA_HOME
Zyga

1
คุณใช้ IDE หรือบรรทัดคำสั่งหรือไม่ คุณอยู่ใน * ระวังหรือ windows?
xwoker

1
คำตอบนี้ครอบคลุมสิ่งที่คุณต้องการหรือไม่? stackoverflow.com/a/4724062/1570834
DB5

ใช่มีประโยชน์ แต่ฉันไม่สามารถทำ chnges ให้ pom ของโครงการ แต่สิ่งที่เหมือนกันและคำตอบที่ถูกต้อง
andPat

คำตอบ:


141

Maven ใช้JAVA_HOMEพารามิเตอร์เพื่อค้นหาเวอร์ชัน Java ที่ควรจะรัน ฉันเห็นจากความคิดเห็นของคุณว่าคุณไม่สามารถเปลี่ยนแปลงได้ในการกำหนดค่า

  • คุณสามารถตั้งค่าJAVA_HOMEพารามิเตอร์ก่อนที่คุณจะเริ่ม maven (และเปลี่ยนกลับหลังจากนั้นถ้าจำเป็น)
  • คุณสามารถไปที่mvn(ไม่ใช่หน้าต่าง) / mvn.bat/ mvn.cmd(windows) และตั้งค่าจาวาเวอร์ชันของคุณได้อย่างชัดเจน

29
@andPat: งั้นเหรอ? คุณสามารถตั้งค่าJAVA_HOMEในโลคอลเชลล์โดยไม่ต้องเปลี่ยนการกำหนดค่าเครื่องเลย (ทันทีที่คุณปิดเชลล์นั้นการเปลี่ยนแปลงจะหายไป) คุณสามารถเปลี่ยนได้ด้วยคำสั่งเดียว:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer

@JoachimSauer: ใช่ แต่ฉันได้ทำการอ้างอิงถึง mvn.bat ซึ่งเป็น Windows โดยเฉพาะ
DanielBarbarian

สำหรับ mac คุณสามารถสร้างไฟล์. mavenrc โดยใช้ JAVA_HOME ด้านใน
Ronan Quillevere

เก่า แต่โยนใน 2 เซ็นต์ของฉัน ฉันกำลังทำงานกับบริการ Java 8 ที่เรียกใช้โดยแอปพลิเคชัน Java 7 เพื่อหลีกเลี่ยงการสลับอย่างต่อเนื่องเมื่อมีการสร้าง I (บน windows) สร้างตัวแปรสภาพแวดล้อม MVN_JAVA_HOME และแทนที่ JAVA_HOME ทุกครั้งด้วย MVN_JAVA_HOME ภายใน mvn และ mvn.cmd
ryanlutgen

75

ใน POM คุณสามารถตั้งค่าคุณสมบัติคอมไพเลอร์เช่น 1.8:

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

10
ในฐานะที่เป็นคอมไพเลอร์ปลั๊กอินเวอร์ชัน 3.7.0 ค่าเริ่มต้นสำหรับแหล่งที่มาและเป้าหมายหากไม่มีการระบุเป็น 1.5
crowne

58

การเพิ่มโซลูชันสำหรับบุคคลที่ติดตั้ง Java เวอร์ชันหลายเวอร์ชัน

เรามี codebase ขนาดใหญ่ซึ่งส่วนใหญ่อยู่ใน Java สิ่งที่ฉันทำงานส่วนใหญ่เขียนด้วย Java 1.7 หรือ 1.8 เนื่องจากJAVA_HOMEเป็นแบบสแตติกฉันจึงสร้างนามแฝงใน.bashrcการทำงาน Maven ด้วยค่าต่าง ๆ :

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"

สิ่งนี้ทำให้ฉันสามารถเรียกใช้ Maven จากบรรทัดคำสั่งบนเครื่องพัฒนาของฉันโดยไม่คำนึงถึงรุ่น JDK ที่ใช้ในโครงการ


2
ถ้าคุณไม่ต้องการ maven 2 และ 3 สำหรับโครงการต่าง ๆ ซึ่งในกรณีนี้คุณมีmvn2และmvn3กำหนดไว้แล้วและการตั้งชื่อจะค่อนข้างขี้ขลาดเมื่อเวอร์ชัน Java เข้ามาเล่น ... : D
Tomislav Nakic-Alfirevic

3
หากคุณใช้ Mac JDK ของคุณจะมาพร้อมกับคำสั่ง java_home เพื่อให้คุณสามารถหลีกเลี่ยงเส้นทางalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ฮาร์ดโค้ดได้

5
เมื่อวันที่ (อูบุนตู + ทุบตี) คุณจะต้องละเว้นก่อน&& mvnmvn ไม่เห็นคุณค่า JAVA_HOME &&กับ
Fabien

@ Fabien รู้ดี; ฉันใช้ ZSH และไม่รู้เกี่ยวกับความแตกต่างของ Bash
Jonathan Landrum

47

บน windows

หากคุณไม่ต้องการเปลี่ยนJAVA_HOMEตัวแปรภายในตัวแปรระบบ

แก้ไขmvn.batไฟล์ของคุณและเพิ่มบรรทัดเช่นนี้

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

สามารถทำได้หลังจากที่ถูก@REM ==== START VALIDATION ====กล่าวถึงโดย @Jonathan

บน Mac (& Linux?)

หากคุณไม่ต้องการเปลี่ยนJAVA_HOMEตัวแปรภายใน~/.bashrcหรือ~/.bash_profile

คุณสามารถสร้าง~/.mavenrcไฟล์และกำหนดใหม่JAVA_HOMEโดยใช้เครื่องมือ java_home

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

ตรวจสุขภาพจิต

คุณสามารถตรวจสอบว่าทุกอย่างทำงานได้ดีโดยดำเนินการคำสั่งต่อไปนี้ เวอร์ชัน jdk ควรแตกต่างกัน

mvn -version

แล้วก็

java -version


ฉันตั้งค่าให้ตั้งค่า JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 โฟลเดอร์ย่อย jre ที่ไม่รวม
nanosoft

32

เพิ่มสองเซ็นต์ของฉันและให้บริการโซลูชั่นอย่างชัดเจน

ฉันมีสอง JDKs ติดตั้งบนเครื่อง Windows ของฉัน - และJDK 1.5JDK 1.6

เริ่มต้นของฉัน (และชุดให้กับตัวแปรสภาพแวดล้อมของระบบ Windows) มีการตั้งค่าJAVA_HOMEJDK 1.5

แต่ผมมีโครงการ Maven ที่ฉันต้องการที่จะสร้าง (เช่นJBehave สอนของ Etsy.com ) JDK 1.6โดยใช้

ทางออกของฉันในสถานการณ์นี้ (ซึ่งทำงาน!) เป็นที่แนะนำโดยจะตั้งใน@DanielBarbarianmvn.bat

สำหรับบางคนไม่คุ้นเคยกับไฟล์แบตช์ของหน้าต่างฉันเพิ่งเพิ่มset JAVA_HOME=<path_to_other_jdk>บรรทัดหลังจาก@REM ==== START VALIDATION ====ในmvn.bat(เช่น, %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
ใน Maven 3.5 จะเปลี่ยนชื่อเป็นmvn.bat mvn.cmd
CKM

30

ฉันเพิ่งเพิ่งผ่านไปเจ็ดปีกับ Maven เรียนรู้เกี่ยวกับ toolchains.xml Maven มีเอกสารแม้กระทั่งและสนับสนุนจาก 2.0.9 - เอกสารประกอบเครื่องมือ

ดังนั้นฉันจึงเพิ่มไฟล์ toolchain.xml ในโฟลเดอร์ ~ / .m2 / ของฉันโดยมีเนื้อหาดังต่อไปนี้:

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

อนุญาตให้คุณกำหนดสิ่งที่ JDK Maven ต่าง ๆ สามารถใช้เพื่อสร้างโครงการโดยไม่คำนึงถึง JDK Maven ที่ทำงานด้วย เรียงลำดับของ Like เมื่อคุณกำหนด JDK ในระดับโปรเจ็กต์ใน IDE


2
คำตอบที่ดีที่สุด! ขอบคุณ สิ่งนี้อธิบายสถานการณ์ที่ชัดเจนที่เราต้องการเรียกใช้ Maven และโครงการภายใต้การคอมไพล์ด้วย java runtimes / framework ที่แตกต่างกันสองแบบ
Soundararajan

5

ทางออกที่ง่ายหนึ่งในการแก้ไขปัญหา -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn ติดตั้งใหม่ทั้งหมด

สำหรับ Mac มันจะมีหน้าตาเป็นอย่างไร -

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / เนื้อหา / หน้าแรก / mvn ติดตั้งใหม่ทั้งหมด

PS: กรณีพิเศษหนึ่งที่ฉันพบคือคำสั่งที่กำหนดข้างต้นไม่ทำงานบนเปลือก 'ปลา' ฉันยังมี bash shell และมันใช้ได้ดี เพียงใช้คำสั่ง 'ทุบตี' เพื่อสลับไปยังเปลือกทุบตี


5

คุณสามารถกำหนดค่าการรวบรวมแหล่งที่มาใช้ JDK ที่แตกต่างกันmaven-compiler-pluginด้วย

เพียงระบุเส้นทางไปยังjavacใน<executable>แท็ก เช่นสำหรับ java11 ดูเหมือนว่า:

<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

เพื่อหลีกเลี่ยงผลกระทบใด ๆ ต่อโครงการของคุณและตัวแปรสภาพแวดล้อมของคุณคุณสามารถกำหนดค่าปลั๊กอิน Maven Compiler เพียงเพื่อ POM ของโครงการโดยระบุรุ่นจาวา Source และ Target

  <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

คุณสามารถตั้งค่า Maven ให้ใช้งานจาวาเวอร์ชันใดก็ได้โดยทำตามคำแนะนำด้านล่าง

ติดตั้ง jenv ในลิงค์เครื่องของคุณ

ตรวจสอบเวอร์ชันจาวาที่มีอยู่ติดตั้งในเครื่องของคุณโดยออกคำสั่งต่อไปนี้ในบรรทัดคำสั่ง

รุ่น jenv

คุณสามารถระบุเวอร์ชัน Java ทั่วโลกได้โดยใช้คำสั่งต่อไปนี้

jenv oracle 64-1.6.0.39

คุณสามารถระบุเวอร์ชัน Java โลคัลสำหรับไดเร็กทอรีใด ๆ (Project) โดยใช้คำสั่งต่อไปนี้ในไดเร็กทอรีในบรรทัดคำสั่ง

jenv oracle 64-1.7.0.11

เพิ่มเวอร์ชัน java ที่ถูกต้องใน pom.xml ของคุณ

หากคุณใช้ maven ในบรรทัดคำสั่งให้ติดตั้งปลั๊กอิน jenv mavenโดยใช้คำสั่งด้านล่าง

jenv enable-plugin maven

ตอนนี้คุณสามารถกำหนดค่าเวอร์ชัน Java ใด ๆ ในเครื่องของคุณให้กับโครงการใด ๆ โดยไม่เกิดปัญหาใด ๆ


1
ชอบตัวเลือกนี้ jenv เป็นเหมือน virtualenv สำหรับ python
Jesse Zhuang

4

บน Macs (สมมติว่าคุณติดตั้งรุ่นที่ถูกต้อง)

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


4

โดยไม่ต้องเปลี่ยนตัวแปรสภาพแวดล้อมคุณสามารถจัดการเวอร์ชัน Java ตามระดับโปรเจ็กต์โดยใช้ปลั๊กอิน Maven Compiler

วิธีที่ 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>

วิธีที่ 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

ใน windows ฉันเพิ่งเพิ่มไฟล์แบตช์หลายไฟล์สำหรับรุ่น JDK ที่แตกต่างกันไปยังโฟลเดอร์ Maven bin

mvn11.cmd

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

จากนั้นคุณสามารถใช้mvn11เพื่อเรียกใช้ Maven ใน JDK ที่ระบุ



1

ฉันไม่ประสบความสำเร็จใน mac ด้วยการตั้งค่าJAVA_HOMEในคอนโซล แต่ฉันก็ประสบความสำเร็จกับวิธีนี้

  • สร้างไฟล์. mavenrc ที่โฮมไดเร็กตอรี่ของคุณ (ดังนั้นไฟล์จะเป็นพา ธ ~/.mavenrc
  • ลงในไฟล์นั้น export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

นอกจากนี้คุณสามารถติดตั้ง maven ได้สองเวอร์ชันและแก้ไขหนึ่งรายการแก้ไขที่นี่:

mvn (ไม่ใช่หน้าต่าง) /mvn.bat/mvn.cmd (Windows)

แทนที่% java_home% ของคุณไปเป็นเส้นทางที่คุณต้องการจาวา จากนั้นเพียงรัน maven จากพา ธ ที่ถูกแก้ไขนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.