Jak ustawić określoną wersję Java na Maven

162

Na moim komputerze mam zainstalowane dwie wersje Java: (1.6 i 1.7 zainstalowane ręcznie przeze mnie). Potrzebuję ich obu do różnych projektów. Ale dla Mavena potrzebuję 1.7, teraz mój Maven używa wersji 1,6 java, jak mogę ustawić Maven na 1.7?

andPat
źródło
Nie mogę wyeksportować JAVA_HOME z Javą 1.7, ponieważ nie mogę dotknąć konfiguracji mojego komputera, domyślna wersja Javy to 1.6.
iPat
Maven używa JAVA_HOME, więc nie myśl, że to, co chcesz zrobić, jest możliwe bez zmiany wartości JAVA_HOME.
Zyga
1
Czy używasz IDE czy wiersza poleceń? Czy korzystasz z * nix lub windows?
xwoker
1
Czy ta odpowiedź obejmuje to, czego chcesz? stackoverflow.com/a/4724062/1570834
DB5
Tak jest przydatne, ale nie mogę dokonać zmian w pom z projektu, niemniej wszystko jest takie samo i odpowiedź jest poprawna
iPat

Odpowiedzi:

138

Maven używa tego JAVA_HOMEparametru, aby znaleźć wersję Java, którą ma uruchomić. Widzę z twojego komentarza, że ​​nie możesz tego zmienić w konfiguracji.

  • Możesz ustawić JAVA_HOMEparametr tuż przed rozpoczęciem maven (iw razie potrzeby zmienić go z powrotem).
  • Możesz także wejść do mvn(innych niż windows) / mvn.bat/ mvn.cmd(windows) i ustawić tam swoją wersję java.
DanielBarbarian
źródło
29
@andPat: tak? Możesz ustawić JAVA_HOMEw swojej lokalnej powłoce bez zmiany konfiguracji maszyny (gdy tylko zamkniesz tę powłokę, zmiana zniknie). Możesz nawet zmienić to na jedno polecenie:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer
@JoachimSauer: Tak, ale wspomniałem również o mvn.bat, który jest specyficzny dla systemu Windows.
DanielBarbarian
Na Macu możesz utworzyć plik .mavenrc z JAVA_HOME wewnątrz
Ronan Quillevere.
Stary, ale dorzucam moje 2 centy. Pracuję nad usługą Java 8, która jest wywoływana przez aplikację Java 7. Aby uniknąć konieczności ciągłego przełączania się podczas budowania, utworzyłem (w systemie Windows) zmienną środowiskową MVN_JAVA_HOME, a następnie zamieniłem każde wystąpienie JAVA_HOME na MVN_JAVA_HOME wewnątrz mvn i mvn.cmd.
ryanlutgen
74

W POM można ustawić właściwości kompilatora, np. Dla 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
Edward Ross
źródło
9
Począwszy od wersji 3.7.0 wtyczki kompilatora, domyślne wartości dla źródła i celu, jeśli nie zostaną określone, to 1.5
crowne
58

Dodanie rozwiązania dla osób z zainstalowanymi wieloma wersjami Java

Mamy dużą bazę kodów, z których większość jest w Javie. Większość tego, nad czym pracuję, jest napisana w Javie 1.7 lub 1.8. Ponieważ JAVA_HOMEjest statyczny, utworzyłem w moim aliasy .bashrcdo uruchamiania Mavena z różnymi wartościami:

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"

Dzięki temu mogę uruchomić Mavena z wiersza poleceń na moim komputerze deweloperskim, niezależnie od wersji JDK używanej w projekcie.

Jonathan Landrum
źródło
2
Chyba że potrzebujesz maven 2 i 3 do różnych projektów, w takim przypadku masz już mvn2i mvn3zdefiniowałeś, a nazewnictwo staje się nieco dziwne, gdy w grę wchodzą również wersje Java ...: D
Tomislav Nakic-Alfirevic,
3
Jeśli używasz komputera Mac, Twój JDK wyposażony java_home polecenia, dzięki czemu można uniknąć ścieżek hardcoding, EGalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk
5
Na (ubuntu + bash) musisz pominąć &&przed mvn. mvn nie widzi wartości JAVA_HOME z &&.
Fabien,
@Fabien dobrze wiedzieć; Używam ZSH i nie wiedziałem o różnicach Bash
Jonathan Landrum
47

W oknach

Jeśli nie chcesz zmieniać swojej JAVA_HOMEzmiennej wewnątrz zmiennych systemowych.

Edytuj mvn.batplik i dodaj taką linię

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

Można to zrobić po tym, @REM ==== START VALIDATION ====jak wspomniał @Jonathan

Na Macu (i Linuksie?)

Jeśli nie chcesz zmieniać JAVA_HOMEzmiennej w pliku ~/.bashrclub~/.bash_profile

możesz utworzyć ~/.mavenrcplik i przedefiniować go JAVA_HOMEza pomocą narzędzia java_home

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

Kontrola poczytalności

Możesz sprawdzić, czy wszystko działa poprawnie, wykonując następujące polecenia. Wersja jdk powinna być inna.

mvn -version

następnie

java -version

Ronan Quillevere
źródło
Ustawiłem JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 z wyłączeniem podfolderu jre.
nanosoft
32

Dodanie moich dwóch centów i jawne podanie rozwiązania.

Mam dwa zestawy JDK zainstalowane na komputerze z systemem Windows - JDK 1.5i JDK 1.6.

Mój domyślny (i ustawiony na zmienną środowiskową systemu Windows) JAVA_HOMEjest ustawiony na JDK 1.5.

Jednak mam projekt Maven , który muszę zbudować (tj. JBehave Tutorial's Etsy.com ) przy użyciu JDK 1.6.

Moje rozwiązanie w tym scenariuszu (które zadziałało!) Jest takie, jak sugeruje @DanielBarbarianto ustawienie mvn.bat.

Dla niektórych, którzy nie są zaznajomieni z plikiem wsadowym okna, po prostu dodałem set JAVA_HOME=<path_to_other_jdk>wiersz po @REM ==== START VALIDATION ====in mvn.bat(tj. %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
źródło
4
W maven 3.5 mvn.batzmieniono nazwę na mvn.cmd.
CKM
30

Niedawno, po siedmiu długich latach w Maven, dowiedziałem się o toolchains.xml. Maven ma to nawet udokumentowane i obsługuje go od 2.0.9 - dokumentacja toolchains

Dodałem więc plik toolchain.xml do mojego folderu ~ / .m2 / z następującą zawartością:

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

Pozwala zdefiniować, z jakich różnych JDK Maven mogą korzystać do budowania projektu, niezależnie od tego, z jakim JDK Maven działa. Coś jak przy definiowaniu JDK na poziomie projektu w IDE.

Ondrej Burkert
źródło
2
Najlepsza odpowiedź! Dzięki. Wyjaśnia to jasną sytuację, w której chcemy uruchomić Mavena i kompilowany projekt z dwoma różnymi środowiskami wykonawczymi / frameworkiem Java.
Soundararajan
5

Jedno proste rozwiązanie problemu -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn czysta instalacja

Na Macu wyglądałoby to tak:

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Contents / Home / mvn clean install

PS: Jednym ze specjalnych przypadków, które znalazłem, jest to, że powyższe polecenie nie działa na skorupie „ryby”. Miałem też dostępną powłokę bash i tam działało dobrze. po prostu użyj polecenia „bash”, aby przełączyć się na powłokę bash.

Pankaj
źródło
5

Można skonfigurować źródła kompilacji przy użyciu innego JDK z maven-compiler-plugin.

Po prostu podaj ścieżkę do javacw <executable>tagu. Np. Dla java11 wygląda to tak:

<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>
Rusłan
źródło
4

Aby uniknąć jakiegokolwiek wpływu na projekt i zmienne środowiskowe, możesz skonfigurować wtyczkę kompilatora Maven tylko do POM projektu, określając źródłową i docelową wersję 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
źródło
4

Możesz ustawić Maven, aby używał dowolnej wersji Java, postępując zgodnie z poniższymi instrukcjami.

Zainstaluj jenv w linku do swojego komputera

Sprawdź dostępne wersje Java zainstalowane na komputerze, wydając następujące polecenie w wierszu poleceń.

wersje jenv

Możesz określić globalną wersję Java za pomocą następującego polecenia.

jenv global oracle64-1.6.0.39

Możesz określić lokalną wersję Java dla dowolnego katalogu (projektu), używając następującego polecenia w katalogu w wierszu poleceń.

jenv local oracle64-1.7.0.11

dodaj poprawną wersję Java do swojego pom.xml

jeśli używasz mavena w wierszu poleceń, zainstaluj wtyczkę jenv maven za pomocą poniższego polecenia

jenv enable-plugin maven

Teraz możesz skonfigurować dowolną wersję Java na swoim komputerze do dowolnego projektu bez żadnych problemów.

Ranuka
źródło
1
jak ta opcja. jenv jest jak virtualenv dla Pythona
Jesse Zhuang
4

Na komputerach Mac (zakładając, że masz zainstalowaną odpowiednią wersję)

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

user2475448
źródło
4

Bez zmiany zmiennych środowiskowych możesz zarządzać wersją java na podstawie poziomu projektu za pomocą wtyczki kompilatora Maven.

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

Metoda 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
źródło
2

W systemie Windows po prostu dodaję wiele plików wsadowych dla różnych wersji JDK do folderu bin Maven w następujący sposób:

mvn11.cmd

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

następnie możesz użyć mvn11do uruchomienia Mavena w określonym JDK.

Guo Ferrell
źródło
1

Nie odniosłem sukcesu na Macu po prostu ustawiając JAVA_HOMEw konsoli, ale udało mi się z takim podejściem

  • Utwórz plik .mavenrc w swoim katalogu domowym (więc ścieżka do pliku będzie miała format ~/.mavenrc
  • Do tego pliku wklej export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
Martin Vich
źródło
0

Możesz także mieć zainstalowane dwie wersje mavena i edytować jedną z nich, edytując tutaj:

mvn (inne niż Windows) /mvn.bat/mvn.cmd (Windows)

zastąpienie wyglądów% java_home% żądaną ścieżką java. Następnie po prostu wykonaj maven z tej zmodyfikowanej ścieżki

Alberto Perez
źródło