Maava için belirli java sürümü nasıl ayarlanır


166

Makinemde iki java sürümü yüklü: (1.6 ve 1.7 manuel olarak kurdum). Her ikisine de farklı projeler için ihtiyacım var. Ama Maven için 1.7'ye ihtiyacım var, şimdi Maven'im 1,6 java sürümünü kullanıyor, Maven'i 1.7'yi kullanmaya nasıl ayarlayabilirim?


JAVA_HOME'u java 1.7 ile veremiyorum çünkü makinemin yapılandırmasına dokunamıyorum, varsayılan Java sürümü 1.6 olmalıdır.
andPat

Maven JAVA_HOME kullanır, bu yüzden yapmak istediğiniz şeyin JAVA_HOME değerini değiştirmeden mümkün olduğunu düşünmeyin.
Zyga

1
Bir IDE veya komut satırı mı kullanıyorsunuz? * Nix veya Windows'ta mısınız?
xwoker

1
Bu cevap istediğini kapsıyor mu? stackoverflow.com/a/4724062/1570834
DB5

Evet yararlıdır ama projenin pom için chnges yapamıyorum, yine malzeme aynıdır ve yanıt doğrudur
andPat

Yanıtlar:


142

Maven, JAVA_HOMEhangi Java sürümünü çalıştırması gerektiğini bulmak için parametreyi kullanır . Yorumunuzdan bunu yapılandırmada değiştiremeyeceğinizi görüyorum.

  • JAVA_HOMEParametreyi maven'e başlamadan hemen önce ayarlayabilirsiniz (ve gerekirse daha sonra tekrar değiştirebilirsiniz).
  • Ayrıca mvn(penceresiz) / mvn.bat/ mvn.cmd(pencerelerinize) gidebilir ve java sürümünüzü açıkça ayarlayabilirsiniz.

29
@andPat: yani? JAVA_HOMEYerel kabuğunuzda, makinenizin yapılandırmasını hiç değiştirmeden ayarlayabilirsiniz (bu kabuğu kapatır kapatmaz, değişiklik gider). Tek bir komut için bile değiştirebilirsiniz:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer

@JoachimSauer: Evet, ancak Windows'a özgü olan mvn.bat'a da başvurdum.
DanielBarbarian

Mac'te içeride JAVA_HOME ile bir .mavenrc dosyası oluşturabilirsiniz
Ronan Quillevere

Eski, ama benim 2 sent atma. Bir Java 7 uygulaması tarafından çağrılan bir Java 8 hizmeti üzerinde çalışıyorum. Bina sırasında sürekli geçiş yapmaktan kaçınmak için, ben (pencerelerde) bir MVN_JAVA_HOME ortam değişkeni oluşturdum ve sonra JAVA_HOME'un her oluşumunu mvn ve mvn.cmd içinde MVN_JAVA_HOME ile değiştirin.
ryanlutgen

75

POM'da, derleyici özelliklerini ayarlayabilirsiniz, örneğin 1.8 için:

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

10
Derleyici eklentisi 3.7.0 sürümünden itibaren, belirtilmemişse kaynak ve hedef için varsayılan değerler 1.5
crowne

59

Birden çok Java sürümü yüklü kişiler için bir çözüm ekleme

Çoğu Java'da olan büyük bir kod tabanımız var. Üzerinde çalıştığım şeylerin çoğu Java 1.7 veya 1.8'de yazılmıştır. Yana JAVA_HOMEstatik, ben benim, takma ad oluşturulan .bashrcfarklı değerlerle Maven'i çalıştırmak için:

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"

Bu, Maven'i projede kullanılan JDK sürümüne bakılmaksızın geliştirme makinemdeki komut satırından çalıştırmama izin veriyor.


2
Çeşitli projeler için maven 2 ve 3'e ihtiyacınız yoksa, bu durumda zaten var mvn2ve mvn3tanımladınız ve Java sürümleri de devreye girdiğinde adlandırma biraz korkar ...: D
Tomislav Nakic-Alfirevic

3
Mac kullanıyorsanız, JDK'nız java_home komutuyla birlikte gelir, böylece kodlama yollarından kaçınabilirsiniz, örneğinalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
Açık (ubuntu + bash), sen ihmal zorunda &&önce mvn. mvn ile JAVA_HOME'un değerini görmez &&.
Fabien

@Fabien bilmek güzel; ZSH kullanıyorum ve Bash farklarını bilmiyordum
Jonathan Landrum

47

Pencerelerde

JAVA_HOMEDeğişkeninizi sistem değişkenleri içinde değiştirmek istemiyorsanız .

Senin düzenleyin mvn.batdosya ve bunun gibi bir satır ekleyin

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

Bu @REM ==== START VALIDATION ====@Jonathan tarafından belirtildiği gibi yapılabilir

Mac'te (& Linux?)

Eğer değiştirmek istemiyorsanız JAVA_HOMEiçindeki değişkeni sizin ~/.bashrcveya~/.bash_profile

java_home aracını kullanarak bir ~/.mavenrcdosya oluşturabilir ve yeniden tanımlayabilirsinizJAVA_HOME

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

Aklı kontrol

Aşağıdaki komutları yürüterek her şeyin yolunda gittiğini doğrulayabilirsiniz. JDK sürümü farklı olmalıdır.

mvn -version

sonra

java -version


JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 hariç jre alt klasörünü ayarlamak için ayarladım.
nanosoft

32

Benim iki sent ekleyerek ve açıkça çözüm sağlar.

Windows Makineme iki JDK yükledim - JDK 1.5ve JDK 1.6.

Varsayılanım (ve Windows sistem ortam değişkenine JAVA_HOMEayarlı ) olarak ayarlanmış JDK 1.5.

Ancak, kullanarak (yani, JBehave Tutorial'ın Etsy.com ) oluşturmak için gereken bir maven projem var JDK 1.6.

Bu senaryoda benim çözümüm (ki işe yaradı!), Ortaya @DanielBarbariankoymak için önerildiği gibidir mvn.bat.

Pencerenin toplu dosya aşina olmayan Bazıları için, sadece temelde eklenen set JAVA_HOME=<path_to_other_jdk>çizgiyi sonra @REM ==== START VALIDATION ====içinde mvn.bat(yani %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.batolarak yeniden adlandırıldı mvn.cmd.
CKM

30

Kısa bir süre önce Maven'le yedi yıl geçirdikten sonra toolchains.xml hakkında bilgi edindim. Maven bile belgeledi ve 2.0.9'dan destekledi - Aletler

Bu yüzden ~ / .m2 / klasörüme şu içeriğe sahip bir toolchain.xml dosyası ekledim:

<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'in çalıştığından bağımsız olarak projeyi oluşturmak için farklı JDK'ların neler kullanabileceğini tanımlamanızı sağlar. IDE'de proje düzeyinde JDK tanımladığınızda olduğu gibi.


2
En iyi cevap! Teşekkürler. Bu, Maven'i ve projeyi iki farklı java çalışma zamanı / çerçevesiyle derlemek istediğimiz açık bir durumu açıklıyor.
Soundararajan

5

Soruna basit bir çözüm -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn temiz yükleme

Mac'te, şuna benzer -

JAVA_HOME = / Kütüphane / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / İçindekiler / Ana Sayfa / mvn clean install

PS: Ben buldum özel bir durum yukarıda verilen komut 'balık' kabuk üzerinde çalışmıyor olmasıdır. Ayrıca bash kabuk mevcut vardı ve orada iyi çalıştı. bash kabuğuna geçmek için sadece 'bash' komutunu kullanın.


5

Sen yapılandırabilirsiniz farklı JDK kullanımı kaynaklardan derleme ile maven-compiler-plugin.

Sadece yolunu belirtin javaciçinde <executable>etiketi. Örneğin, java11 için şöyle görünür:

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

5

Ortam Değişkenlerini değiştirmeden, Maven Derleyici Eklentisini kullanarak java sürümünü proje düzeyine göre yönetebilirsiniz.

Yöntem 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>

Yöntem 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>

4

Projenize ve Ortam Değişkenlerinize herhangi bir etkiyi önlemek için Maven Derleyici Eklentisini Kaynak ve Hedef java sürümünü belirterek yalnızca projenin POM'sine yapılandırabilirsiniz.

  <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'i aşağıdaki talimatları izleyerek herhangi bir java sürümünü kullanacak şekilde ayarlayabilirsiniz.

Jenv'yi makine bağlantınıza yükleyin

Komut satırında aşağıdaki komutu vererek makinenize kurulu mevcut java sürümlerini kontrol edin.

jenv sürümleri

Aşağıdaki komutu kullanarak genel Java sürümünü belirleyebilirsiniz.

jenv global oracle64-1.6.0.39

Komut satırındaki dizinde aşağıdaki komutu kullanarak herhangi bir dizin (Proje) için yerel Java sürümünü belirtebilirsiniz.

jenv yerel kâhin64-1.7.0.11

pom.xml'nize doğru java sürümünü ekleyin

maven komut satırında çalıştırıyorsanız, aşağıdaki komutu kullanarak jenv maven eklentisini yükleyin

jenv enable-eklentisi maven

Artık makinenizdeki herhangi bir java sürümünü herhangi bir projeye herhangi bir sorun olmadan yapılandırabilirsiniz.


1
Bu seçenek gibi. jenv python için virtualenv gibi
Jesse Zhuang

4

Mac'lerde (doğru sürümün yüklü olduğu varsayılarak)

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


2

Pencerelerde, Maven bin klasörüne şu şekilde farklı JDK sürümleri için birden fazla toplu iş dosyası ekliyorum:

mvn11.cmd

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

mvn11Maven'i belirtilen JDK'da çalıştırmak için kullanabilirsiniz .



1

JAVA_HOMEKonsolda sadece Mac'te başarılı olamadım ama bu yaklaşımla başarılı oldum

  • Ana dizininizde .mavenrc dosyası oluşturun (böylece dosya yolu ~/.mavenrc
  • Bu dosya yapıştırmasına export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

Ayrıca , maven'in iki sürümünü yükleyebilir ve bunlardan birini düzenleyerek burada düzenleyebilirsiniz:

mvn (non-dönüş) /mvn.bat/mvn.cmd (dönüş)

% java_home% görünümlerinizi java istediğiniz yolunuza yerleştirerek. Sonra sadece bu değiştirilmiş yoldan maven yürütmek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.