Cara mengatur versi java tertentu ke Maven

166

Di mesin saya, saya memiliki dua versi java diinstal: (1,6 dan 1,7 diinstal secara manual oleh saya). Saya membutuhkan keduanya untuk proyek yang berbeda. Tetapi untuk Maven saya membutuhkan 1,7, sekarang Maven saya menggunakan versi java, bagaimana saya bisa mengatur Maven untuk menggunakan 1,7?

danPat
sumber
Saya tidak bisa mengekspor JAVA_HOME dengan java 1.7 karena saya tidak bisa menyentuh configuraton mesin saya, versi default Java harus 1.6.
andPat
Maven menggunakan JAVA_HOME jadi jangan berpikir apa yang ingin Anda lakukan adalah mungkin tanpa mengubah nilai JAVA_HOME.
Zyga
1
Apakah Anda menggunakan IDE atau baris perintah? Apakah Anda menggunakan * nix atau windows?
xwoker
1
Apakah jawaban ini mencakup apa yang Anda inginkan? stackoverflow.com/a/4724062/1570834
DB5
Ya itu berguna tetapi saya tidak dapat membuat chomges ke pom proyek, namun hal-hal itu sama dan jawabannya benar
danPat

Jawaban:

142

Maven menggunakan JAVA_HOMEparameter untuk menemukan versi Java mana yang seharusnya dijalankan. Saya melihat dari komentar Anda bahwa Anda tidak dapat mengubahnya di konfigurasi.

  • Anda dapat mengatur JAVA_HOMEparameter sebelum memulai maven (dan mengubahnya kembali sesudahnya jika perlu).
  • Anda juga bisa masuk ke mvn(non-windows) / mvn.bat/ mvn.cmd(windows) Anda dan mengatur versi java Anda secara eksplisit di sana.
DanielBarbarian
sumber
29
@andPat: begitu? Anda dapat mengatur JAVA_HOMEshell lokal Anda tanpa mengubah konfigurasi mesin Anda sama sekali (segera setelah Anda menutup shell itu, perubahan itu hilang). Anda bahkan dapat mengubahnya untuk satu perintah:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer
@ JoachimSauer: Ya, tapi saya juga membuat referensi ke mvn.bat, yang merupakan Windows spesifik.
DanielBarbarian
Di mac Anda dapat membuat file .mavenrc dengan JAVA_HOME di dalamnya
Ronan Quillevere
Tua, tapi melempar 2 sen saya. Saya sedang mengerjakan layanan Java 8 yang dipanggil oleh aplikasi Java 7. Untuk menghindari keharusan beralih secara konstan saat membangun, saya (di windows) membuat variabel lingkungan MVN_JAVA_HOME, dan kemudian mengganti setiap kemunculan JAVA_HOME dengan MVN_JAVA_HOME di dalam mvn dan mvn.cmd.
ryanlutgen
75

Di POM, Anda dapat mengatur properti kompiler, misalnya untuk 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
Edward Ross
sumber
10
Pada kompiler-plugin versi 3.7.0, nilai default untuk sumber dan target jika dibiarkan tidak ditentukan adalah 1,5
crowne
59

Menambahkan solusi untuk orang-orang dengan beberapa versi Java diinstal

Kami memiliki basis kode yang besar, sebagian besar di Jawa. Mayoritas apa yang saya kerjakan ditulis dalam Java 1.7 atau 1.8. Karena JAVA_HOMEstatis, saya membuat alias di .bashrcuntuk menjalankan Maven dengan nilai yang berbeda:

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"

Ini memungkinkan saya menjalankan Maven dari baris perintah pada mesin pengembangan saya terlepas dari versi JDK yang digunakan pada proyek.

Jonathan Landrum
sumber
2
Kecuali Anda membutuhkan pakar 2 dan 3 untuk berbagai proyek, dalam hal ini Anda telah memiliki mvn2dan mvn3menetapkan dan penamaannya menjadi sedikit funky ketika versi Java juga ikut bermain ...: D
Tomislav Nakic-Alfirevic
3
Jika Anda menggunakan Mac, JDK Anda dilengkapi dengan perintah java_home sehingga Anda dapat menghindari jalur hardcoding, misalnyaalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk
5
Pada (ubuntu + bash), Anda harus menghilangkan yang &&sebelumnya mvn. mvn tidak melihat nilai JAVA_HOME dengan &&.
Fabien
@Fabien senang mengetahui; Saya menggunakan ZSH dan tidak tahu tentang perbedaan Bash
Jonathan Landrum
47

Di jendela

Jika Anda tidak ingin mengubah JAVA_HOMEvariabel Anda di dalam variabel sistem.

Edit mvn.batfile Anda dan tambahkan baris seperti ini

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

Ini bisa dilakukan setelah @REM ==== START VALIDATION ====seperti disebutkan oleh @Jonathan

Di Mac (& Linux?)

Jika Anda tidak ingin mengubah JAVA_HOMEvariabel Anda di dalam ~/.bashrcatau~/.bash_profile

Anda dapat membuat ~/.mavenrcfile dan mendefinisikan kembali Anda JAVA_HOMEmenggunakan alat java_home

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

Sanity Check

Anda dapat memverifikasi bahwa semuanya berfungsi dengan baik dengan menjalankan perintah berikut. Versi jdk harus berbeda.

mvn -version

kemudian

java -version

Ronan Quillevere
sumber
Saya mengaturnya untuk mengatur JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 tidak termasuk subfolder jre.
nanosoft
32

Menambahkan dua sen saya dan secara eksplisit memberikan solusinya.

Saya memiliki dua JDK yang diinstal pada Mesin Windows saya - JDK 1.5dan JDK 1.6.

Default saya (dan diatur ke variabel lingkungan sistem windows) JAVA_HOMEdiatur ke JDK 1.5.

Namun, saya memiliki proyek pakar yang perlu saya bangun (yaitu, Etsy.com Tutorial JBehave ) menggunakan JDK 1.6.

Solusi saya dalam skenario ini (yang berhasil!), Seperti yang disarankan oleh @DanielBarbarianuntuk memasangnya mvn.bat.

Untuk beberapa yang tidak terbiasa dengan file batch window, saya pada dasarnya menambahkan set JAVA_HOME=<path_to_other_jdk>baris setelah @REM ==== START VALIDATION ====dalam mvn.bat(yaitu, %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
Jonathan
sumber
4
Dalam pakar 3.5, mvn.batdiubah namanya menjadi mvn.cmd.
CKM
30

Saya baru-baru ini, setelah tujuh tahun bersama Maven, belajar tentang toolchains.xml. Maven bahkan telah mendokumentasikan dan mendukungnya dari 2.0.9 - dokumentasi toolchains

Jadi saya menambahkan file toolchain.xml ke folder ~ / .m2 / saya dengan konten berikut:

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

Hal ini memungkinkan Anda untuk menentukan apa yang berbeda JDK Maven dapat digunakan untuk membangun proyek terlepas dari JDK Maven berjalan dengan. Agak seperti ketika Anda mendefinisikan JDK pada tingkat proyek di IDE.

Ondrej Burkert
sumber
2
Jawaban terbaik,! Terima kasih. Ini menjelaskan situasi yang jelas di mana kami ingin menjalankan Maven dan proyek dalam kompilasi dengan dua runtime / kerangka java yang berbeda.
Soundararajan
5

Satu solusi sederhana untuk masalah ini -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn instal bersih

Di Mac, akan terlihat seperti -

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Isi / Rumah / instalasi bersih mvn

PS: Satu kasus khusus yang saya temukan adalah perintah yang diberikan di atas tidak bekerja pada shell 'fish'. Saya juga punya bash shell yang tersedia dan bekerja dengan baik di sana. cukup gunakan perintah 'bash' untuk beralih ke bash shell.

Pankaj
sumber
5

Anda dapat mengkonfigurasi kompilasi sumber menggunakan JDK berbeda dengan maven-compiler-plugin.

Cukup tentukan path ke javacdalam <executable>tag. Misalnya untuk java11 sepertinya:

<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>
Ruslan
sumber
4

Untuk menghindari dampak pada proyek Anda dan Variabel Lingkungan Anda, Anda dapat mengonfigurasi Plugin Maven Compiler hanya untuk POM proyek, menentukan Sumber dan Target versi java

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

Anda dapat mengatur Maven untuk menggunakan versi java apa pun mengikuti instruksi di bawah ini.

Instal jenv di tautan mesin Anda

Periksa versi java yang tersedia yang terpasang di mesin Anda dengan mengeluarkan perintah berikut di baris perintah.

versi jenv

Anda dapat menentukan versi Java global menggunakan perintah berikut.

jenv global oracle64-1.6.0.39

Anda dapat menentukan versi Java lokal untuk direktori apa saja (Proyek) menggunakan perintah berikut di direktori di baris perintah.

jenv local oracle64-1.7.0.11

tambahkan versi java yang benar di pom.xml Anda

jika Anda menjalankan maven di command line, instal jenv maven plugin menggunakan perintah di bawah ini

jenv enable-plugin maven

Sekarang Anda dapat mengkonfigurasi versi java di mesin Anda ke proyek apa pun tanpa masalah.

Ranuka
sumber
1
suka opsi ini. jenv seperti virtualenv untuk python
Jesse Zhuang
4

Di Mac, (dengan asumsi Anda memiliki versi yang benar diinstal)

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

pengguna2475448
sumber
4

Tanpa mengubah Variabel Lingkungan, Anda dapat mengelola versi java berdasarkan tingkat proyek dengan menggunakan Maven Compiler Plugin.

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

Metode 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>
Saveendra Ekanayake
sumber
2

Di windows, saya hanya menambahkan beberapa file batch untuk versi JDK yang berbeda ke folder Maven bin seperti ini:

mvn11.cmd

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

maka Anda dapat menggunakan mvn11untuk menjalankan Maven di JDK yang ditentukan.

Guo Ferrell
sumber
1

Saya tidak berhasil di mac dengan hanya pengaturan JAVA_HOMEdi konsol tapi saya berhasil dengan pendekatan ini

  • Buat file .mavenrc di direktori home Anda (jadi file tersebut akan menjadi path ~/.mavenrc
  • Ke dalam tempel file itu export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
Martin Vich
sumber
0

Anda juga dapat menginstal dua versi pakar, dan mengedit salah satunya, mengedit di sini:

mvn (non-windows) /mvn.bat/mvn.cmd (windows)

mengganti% java_home% penampilan Anda ke jalur java yang Anda inginkan. Kemudian jalankan saja pakar dari jalur yang dimodifikasi itu

Alberto Perez
sumber