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?
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?
Odpowiedzi:
Maven używa tego JAVA_HOME
parametru, aby znaleźć wersję Java, którą ma uruchomić. Widzę z twojego komentarza, że nie możesz tego zmienić w konfiguracji.
JAVA_HOME
parametr tuż przed rozpoczęciem maven (iw razie potrzeby zmienić go z powrotem).mvn
(innych niż windows) / mvn.bat
/ mvn.cmd
(windows) i ustawić tam swoją wersję java.JAVA_HOME
w 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
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>
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_HOME
jest statyczny, utworzyłem w moim aliasy .bashrc
do 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.
mvn2
i mvn3
zdefiniowałeś, a nazewnictwo staje się nieco dziwne, gdy w grę wchodzą również wersje Java ...: D
alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
&&
przed mvn
. mvn nie widzi wartości JAVA_HOME z &&
.
W oknach
Jeśli nie chcesz zmieniać swojej JAVA_HOME
zmiennej wewnątrz zmiennych systemowych.
Edytuj mvn.bat
plik 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_HOME
zmiennej w pliku ~/.bashrc
lub~/.bash_profile
możesz utworzyć ~/.mavenrc
plik i przedefiniować go JAVA_HOME
za 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
Dodanie moich dwóch centów i jawne podanie rozwiązania.
Mam dwa zestawy JDK zainstalowane na komputerze z systemem Windows - JDK 1.5
i JDK 1.6
.
Mój domyślny (i ustawiony na zmienną środowiskową systemu Windows) JAVA_HOME
jest 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 @DanielBarbarian
to 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
mvn.bat
zmieniono nazwę na mvn.cmd
.
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.
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.
Można skonfigurować źródła kompilacji przy użyciu innego JDK z maven-compiler-plugin
.
Po prostu podaj ścieżkę do javac
w <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>
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>
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.
Na komputerach Mac (zakładając, że masz zainstalowaną odpowiednią wersję)
JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests
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>
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ć mvn11
do uruchomienia Mavena w określonym JDK.
W systemie Linux / Unix, JAVA_HOME w skrypcie powłoki „mvn” jest zastępowane przez ustawienia w
$HOME/.mavenrc
proszę Gdzie dodać zmienne ścieżki JAVA_HOME i MAVEN w systemie Linux
Nie odniosłem sukcesu na Macu po prostu ustawiając JAVA_HOME
w konsoli, ale udało mi się z takim podejściem
~/.mavenrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
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