บนเครื่องของฉันฉันมีสองรุ่นจาวาติดตั้ง: (1.6 และ 1.7 ติดตั้งด้วยตนเองโดยฉัน) ฉันต้องการทั้งคู่สำหรับโครงการต่าง ๆ แต่สำหรับ Maven ฉันต้องการ 1.7 ตอนนี้ Maven ของฉันใช้เวอร์ชัน 1.6 java ฉันจะตั้งค่า Maven ให้ใช้ 1.7 ได้อย่างไร
บนเครื่องของฉันฉันมีสองรุ่นจาวาติดตั้ง: (1.6 และ 1.7 ติดตั้งด้วยตนเองโดยฉัน) ฉันต้องการทั้งคู่สำหรับโครงการต่าง ๆ แต่สำหรับ Maven ฉันต้องการ 1.7 ตอนนี้ Maven ของฉันใช้เวอร์ชัน 1.6 java ฉันจะตั้งค่า Maven ให้ใช้ 1.7 ได้อย่างไร
คำตอบ:
Maven ใช้JAVA_HOME
พารามิเตอร์เพื่อค้นหาเวอร์ชัน Java ที่ควรจะรัน ฉันเห็นจากความคิดเห็นของคุณว่าคุณไม่สามารถเปลี่ยนแปลงได้ในการกำหนดค่า
JAVA_HOME
พารามิเตอร์ก่อนที่คุณจะเริ่ม maven (และเปลี่ยนกลับหลังจากนั้นถ้าจำเป็น)mvn
(ไม่ใช่หน้าต่าง) / mvn.bat
/ mvn.cmd
(windows) และตั้งค่าจาวาเวอร์ชันของคุณได้อย่างชัดเจนJAVA_HOME
ในโลคอลเชลล์โดยไม่ต้องเปลี่ยนการกำหนดค่าเครื่องเลย (ทันทีที่คุณปิดเชลล์นั้นการเปลี่ยนแปลงจะหายไป) คุณสามารถเปลี่ยนได้ด้วยคำสั่งเดียว:JAVA_HOME=/path/to/jdk17/ mvn build
ใน POM คุณสามารถตั้งค่าคุณสมบัติคอมไพเลอร์เช่น 1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
เรามี 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 ที่ใช้ในโครงการ
mvn2
และmvn3
กำหนดไว้แล้วและการตั้งชื่อจะค่อนข้างขี้ขลาดเมื่อเวอร์ชัน Java เข้ามาเล่น ... : D
alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
&&
mvn
mvn ไม่เห็นคุณค่า JAVA_HOME &&
กับ
บน 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
เพิ่มสองเซ็นต์ของฉันและให้บริการโซลูชั่นอย่างชัดเจน
ฉันมีสอง JDKs ติดตั้งบนเครื่อง Windows ของฉัน - และJDK 1.5
JDK 1.6
เริ่มต้นของฉัน (และชุดให้กับตัวแปรสภาพแวดล้อมของระบบ Windows) มีการตั้งค่าJAVA_HOME
JDK 1.5
แต่ผมมีโครงการ Maven ที่ฉันต้องการที่จะสร้าง (เช่นJBehave สอนของ Etsy.com ) JDK 1.6
โดยใช้
ทางออกของฉันในสถานการณ์นี้ (ซึ่งทำงาน!) เป็นที่แนะนำโดยจะตั้งใน@DanielBarbarian
mvn.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
mvn.bat
mvn.cmd
ฉันเพิ่งเพิ่งผ่านไปเจ็ดปีกับ 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
ทางออกที่ง่ายหนึ่งในการแก้ไขปัญหา -
JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn ติดตั้งใหม่ทั้งหมด
สำหรับ Mac มันจะมีหน้าตาเป็นอย่างไร -
JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / เนื้อหา / หน้าแรก / mvn ติดตั้งใหม่ทั้งหมด
PS: กรณีพิเศษหนึ่งที่ฉันพบคือคำสั่งที่กำหนดข้างต้นไม่ทำงานบนเปลือก 'ปลา' ฉันยังมี bash shell และมันใช้ได้ดี เพียงใช้คำสั่ง 'ทุบตี' เพื่อสลับไปยังเปลือกทุบตี
คุณสามารถกำหนดค่าการรวบรวมแหล่งที่มาใช้ 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>
เพื่อหลีกเลี่ยงผลกระทบใด ๆ ต่อโครงการของคุณและตัวแปรสภาพแวดล้อมของคุณคุณสามารถกำหนดค่าปลั๊กอิน 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>
คุณสามารถตั้งค่า 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 ใด ๆ ในเครื่องของคุณให้กับโครงการใด ๆ โดยไม่เกิดปัญหาใด ๆ
บน Macs (สมมติว่าคุณติดตั้งรุ่นที่ถูกต้อง)
JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests
โดยไม่ต้องเปลี่ยนตัวแปรสภาพแวดล้อมคุณสามารถจัดการเวอร์ชัน 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>
ใน windows ฉันเพิ่งเพิ่มไฟล์แบตช์หลายไฟล์สำหรับรุ่น JDK ที่แตกต่างกันไปยังโฟลเดอร์ Maven bin
mvn11.cmd
@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*
จากนั้นคุณสามารถใช้mvn11
เพื่อเรียกใช้ Maven ใน JDK ที่ระบุ
บน Linux / Unix, JAVA_HOME ภายในเชลล์สคริปต์ 'mvn' ถูกแทนที่โดยการตั้งค่าใน
$HOME/.mavenrc
ฉันไม่ประสบความสำเร็จใน mac ด้วยการตั้งค่าJAVA_HOME
ในคอนโซล แต่ฉันก็ประสบความสำเร็จกับวิธีนี้
~/.mavenrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
นอกจากนี้คุณสามารถติดตั้ง maven ได้สองเวอร์ชันและแก้ไขหนึ่งรายการแก้ไขที่นี่:
mvn (ไม่ใช่หน้าต่าง) /mvn.bat/mvn.cmd (Windows)
แทนที่% java_home% ของคุณไปเป็นเส้นทางที่คุณต้องการจาวา จากนั้นเพียงรัน maven จากพา ธ ที่ถูกแก้ไขนั้น