Próbuję zbudować zmodyfikowaną przeze mnie wtyczkę Hudson, która wymaga jdk1.6. To jest w porządku, ale nie wiem, jak mogę powiedzieć mavenowi, gdzie jest inny jdk. Znalazłem kilka wzmianek w Internecie, ale wydaje mi się, że mnie nie dotyczą. Niektórzy sugerują dodanie jakiejś konfiguracji, .m2/settings.xml
ale ja nie mam settings.xml
. Poza tym nie chcę używać wersji 1.6 dla wszystkich kompilacji mavena.
Jednym z nich jest to, że używam mvn
w Cygwin, jeśli to w ogóle ma znaczenie. Wygląda na to, że powinienem być w stanie podać specyfikację w pliku pom projektu, ale istniejący pom jest dość pusty.
Zatem najważniejsze jest, czy istnieje sposób na określenie jdk dla pojedynczego wywołania maven?
set JAVA_HOME="C:\Java\jdk7"
JAVA_HOME
można ustawić dla Mavena (przynajmniej na Macu) w tym pliku:/private/etc/mavenrc
- I może to użyć czegoś takiego (zwróć uwagę na lewe cudzysłowy, a nie pojedyncze cudzysłowy!):export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_75`
export JAVA_HOME='D:/dev/java/jdk8/jre'
(dla mnie działa)java -version
, nadal wyświetla poprzednią wersję.Wygląda na to, że maven podaje teraz rozwiązanie: Kompilowanie źródeł przy użyciu innego JDK
Powiedzmy swoje
JAVA_HOME
punkty do JDK7 (który będzie uruchamiał procesy Maven)Twój
pom.xml
mógłby być:Jeśli twoi programiści po prostu dodają (i dostosują) następujące wiersze w swoich
settings.xml
, twój pom będzie niezależny od platformy:źródło
-Dmaven.compiler.fork=true
i-Dmaven.compiler.executable=/path/to/target/javac
w linii poleceń.compile: compile ma właściwość użytkownika, która umożliwia określenie ścieżki do pliku
javac
.Należy pamiętać, że ta właściwość użytkownika działa tylko wtedy, gdy
fork
jesttrue
tofalse
ustawienie domyślne.Jeśli wartość zawiera spacje, może być konieczne podwójne cudzysłów.
Zobacz także Pierwszeństwo właściwości niestandardowych Maven .
źródło
JAVA_HOME
zmienną. Na przykład (w powłoce bash):JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/usr/lib/jvm/java-8-openjdk-amd64/bin/javac spring-boot:run
Jak powiedziałeś "Poza tym nie chcę używać 1.6 dla wszystkich kompilacji mavena" .... Więc lepiej powiem zmodyfikuj plik pom i określ, której wersji jdk użyć.
Zapewni to, że twój konkretny projekt używa tej wersji jdk.
źródło
Mówię, że ustawiasz
JAVA_HOME
zmienną środowiskową, tak jak mówi Pascal: W Cygwin, jeśli używasz basha, tak jak powinna być twoja powłoka:Dołączenie
bin
ścieżki katalogu java doPATH
zmiennej środowiskowej nigdy nie zaszkodzi :Dodaj także,
maven-enforce-plugin
aby upewnić się, że używany jest właściwy JDK. To dobra praktyka dla twojego pom.Proszę zobaczyć wtyczkę Maven Enforcer - Użycie .
źródło
Wiem, że to stara nić. Ale miałem pewne problemy z czymś podobnym do tego w źródle kompilatora Maven dla Java 8. Zrozumiałem to dzięki szybkiej poprawce wspomnianej w tym artykule, pomyślałem, że mogę to umieścić tutaj i być może pomogę innym:
źródło
Maven używa zmiennej $ JAVACMD jako ostatecznego polecenia java, ustaw ją tak, aby plik wykonywalny java przełączył się na inny JDK.
źródło
Hudson umożliwia także zdefiniowanie kilku środowisk wykonawczych Java i umożliwia wywoływanie Mavena za pomocą jednego z nich. Przyjrzyj się bliżej stronie konfiguracji.
źródło
Jeśli zainstalowano Java przez
brew
wMac
to są szanse, znajdziesz swój Java Katalog macierzysty tutaj:Następnym krokiem byłoby teraz znalezienie
Java Home
wskazanego przez producenta katalogu. Aby go znaleźć, wpisz polecenie:mvn -version
Interesujące nas tu pola to:
Java version
iruntime
.Maven obecnie wskazuje na
Java 13
. Możesz również zobaczyć ścieżkę Java Home w kluczowym środowisku wykonawczym, która jest następująca:/usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
Aby zmienić wersję Java Mavena, musimy dodać
Java 8
ścieżkę home doJAVA_HOME
zmiennej env.Aby to zrobić, musimy uruchomić polecenie:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
w terminalu.Jeśli teraz sprawdzimy wersję mavena, zobaczymy, że wskazuje ona teraz na Javę 8.
Problem z tym polega na tym, że jeśli ponownie sprawdzisz wersję mavena w nowym terminalu, zauważysz, że wskazuje ona na Javę 13. Aby tego uniknąć, sugerowałbym dodanie
JAVA_HOME
zmiennej w~/.profile
pliku.W ten sposób, gdy terminal się ładuje, domyślnie zajmie on wartość zdefiniowaną w JAVA_HOME. To jest linia, którą musisz dodać w
~/.profile
pliku:export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
Możesz otworzyć nowy terminal i sprawdzić wersję Maven, (
mvn -version
), a zobaczysz, że tym razem wskazuje ona na Javę 8.źródło
Miałem problem z kompilacją z maven w Eclipse w systemie Windows 7.
Chociaż zauważyłem, że kompilacja mvn działa dobrze z wiersza poleceń.
Eclipse rozważał jako domyślną JVM instalację JRE zamiast JDK, więc kompilacja kończyła się niepowodzeniem.
Dodałem do eclipse.ini następującą linię:
Również zaczynając od zaćmienia użyłem w sekcji "Cele" poniższej listy:
Błąd kompilacji został rozwiązany.
źródło
Dla Java 9:
źródło
Jeszcze inną alternatywą do zarządzania wieloma wersjami jdk jest jEnv
Po instalacji możesz po prostu zmienić wersję java „lokalnie”, tj. Dla określonego katalogu projektu:
Spowoduje to również, że mvn użyje tej wersji lokalnie, gdy włączysz wtyczkę mvn:
źródło
Możesz także ustawić JDK dla Mavena w pliku w swoim katalogu domowym
~/.mavenrc
:Ta zmienna środowiskowa zostanie sprawdzona przez skrypt mvn i użyta, jeśli jest obecna:
https://github.com/CodeFX-org/mvn-java-9/tree/master/mavenrc
źródło