Wersja Java automatycznie zmienia się na java 1.5 po aktualizacji Mavena

121

Używam zaćmienia jako IDE. Kiedy klikam prawym przyciskiem myszy projekt, a następnie klikam maven zaktualizuj moją wersję java, zmieniam się na 1.5. Oto, co zrobiłem do tej pory, wykonałem wszystkie wymienione tutaj kroki

http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires-java-1-6-or-newer-in-maven-projects/

  1. Zmieniłem „ścieżkę budowania Java” na „domyślny jre obszaru roboczego 1.8.0_25”
  2. Następnie zmieniono „kompilator java” na 1.8
  3. Następnie zmieniono „aspekty projektu”> java> 1.8
  4. Zmieniono wersję java pom.xml na 1.8
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.3.v20140225</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Po tym wszystkim, kiedy kliknę na „Maven update”, moja wersja java automatycznie zmieni się na 1.5. Również w powyższych krokach pierwsza wersja dwustopniowa również zmienia się automatycznie na 1.5. Jak mogę to naprawić?

asdlfkjlkj
źródło

Odpowiedzi:

222

Otwórz pom.xmlplik i dodaj do niego następujące wiersze:

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

Gdzie 1.8jest wersja Java twojego aktualnego JDK / JRE. Innym sposobem osiągnięcia tego celu jest dodanie <build>z maven-compile-pluginjak

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
</plugins>
</build>

EDYTOWAĆ

Jeśli szukasz sposobu, aby to działało z wersjami Javy 9+ proszę spojrzeć na @ JDelorean za odpowiedź tutaj i nie zapomnij dać mu upvote jak dobrze :)

Jorge Campos
źródło
4
Myślę, że zrobiłem już drugi sposób i również opublikowałem kod. Nie widzę, co zmieniłeś w tym kodzie
asdlfkjlkj
1
Tak. Kiedy odpowiedziałem, nie wysłałeś kodu. Więc dodaj pierwszą część mojej odpowiedzi. propertiesTag. Jeśli twój POM ma już propertiestag, po prostu dodaj tagi wewnątrz niego, powinno działać dobrze.
Jorge Campos,
@asdlfkjlkj Twoje zaćmienie używa wbudowanego Mavena lub zewnętrznej instalacji Mavena? Kolejne pytanie, które twoje zaćmienie wskazuje na JRE lub JDK? To są dwa pytania dotyczące Eclipse + Maven, które mają znaczenie.
Jorge Campos
@JorgeCampos - zadałem nowe pytanie. Masz o tym jakiś pomysł? stackoverflow.com/questions/42855512/…
Aishu
@JorgeCampos gdzie znajdę, maven-complier-pluginaby dodać <build>? dzięki
夢 の の 夢
23

Miałem ten sam problem, kiedy instalowałem Javę 9. Mój projekt był domyślnie ustawiony na środowisko wykonawcze J2SE-1.5. O dziwo, poziom zgodności Java 9 nie jest określany tak jak poprzednie wersje, tj. „1.8”, ale jako „9”. Musiałem więc odpowiednio podać moje właściwości i konfigurację wtyczki kompilatora Maven:

<properties>
    <maven.compiler.source>9</maven.compiler.source>
    <maven.compiler.target>9</maven.compiler.target>
</properties>

i

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>9</source>
        <target>9</target>
    </configuration>
</plugin>

Wydaje się, że to rozwiązało problem.

JDelorean
źródło
1
Dotyczy to również języka Java 10+ i chciałbym dodać, że w wielomodułowym projekcie Maven jest wymagany tylko w nadrzędnym POM.
mmeany
W Javie 9 i nowszych wersjach dostępna jest nowa --release <version>opcja kompilatora, która jest preferowana w stosunku do źródła / celu. Można to skonfigurować za pomocą maven.compiler.releasewłaściwości lub <release>ustawienia we wtyczce maven-compiler. Zobacz: stackoverflow.com/questions/43102787/…
Thomas Taylor
7

Główną przyczyną tego problemu jest to, że jeśli z jakiegoś powodu Eclipse nie może rozwiązać prawidłowej wartości maven.compiler.sourcewłaściwości podczas generowania / aktualizowania pliku .classpath z pom, po prostu domyślnie używa org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5.

Jak fachowo odpowiedział @ jorge-campos , istnieje wiele sposobów ustawienia tej właściwości.

Jednak odpowiedź Jorge wydawała się nie działać dla mnie. Oto moje ustawienia:

<properties>
    <javaVersion>1.8</javaVersion>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

...

Dokładnie. ${java.version}jest nie zamierza rozwiązać w zupełnie innym () nieruchomości javaVersioni Eclipse zignorował własności i używane domyślne.

Co prowadzi mnie z powrotem do części „ z jakiegokolwiek powodu ”, którą otworzyłem; głupota deweloperów może być jednym z tych powodów.

David Avendasora
źródło
1
Jak zmienić org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName
Głosowanie w dół za powiedzenie „głupoty programistów może być jednym z tych powodów”.
Luke Hutchison
W moim przypadku używam Maven / Tycho do budowania wtyczek Eclipse, a powyższa wartość domyślna została ostatecznie wyprowadzona ze środowiska wykonawczego określonego w pliku MANIFEST.MF. Zmiana środowiska wykonawczego na JavaSE-1.8 rozwiązała problem.
mat101
3

Dodaj te linie do pliku pom.xml, a następnie kliknij prawym przyciskiem myszy bibliotekę systemową JRE -> Właściwości -> Ustaw poprawne środowisko wykonawcze na Javę 1.8 lub wersję, którą chcesz ustawić.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin> 
Avinav Mishra
źródło
Brakuje Twojej odpowiedzi <build> <plugins> ... Twoja odpowiedź tutaj ... </plugins> </build> sprawia, że ​​jest ona jaśniejsza dla ludzi.
Kyle Bridenstine
1

Miałem ten problem. W moim przypadku tag <properties> i zagnieżdżone tagi, o których wspomina Jorge Campos, były w złym miejscu. Jeśli umieściłem je między tagami <hostversion> i <dependencies> w pliku pom.xml, to zachowanie ustało.

Można to wykryć w Eclipse, jeśli włączona jest walidacja tych plików.

nsandersen
źródło
1

Mam podobny problem na komputerze jednego z kolegów z zespołu. Używał starej wersji Eclipse, myślę, że używał Kepplera. Projekt po aktualizacji zmienia wersję JRE na 1.5.

Prosta aktualizacja Eclipse do najnowszej wersji rozwiązuje ten problem.

user902383
źródło
Tak, nie. Używam Neon, moje ustawienia obszaru roboczego to 1.8, ale kiedy importuję (lub aktualizuję) projekt Mavena, Eclipse nalega na używanie J2SE-1.5.
Antares42,
@ Antares42 Czy jesteś w stanie budować z wiersza poleceń bez żadnych problemów? Której wersji m2e używasz?
user902383
1
Mogę budować za pomocą wiersza poleceń (a raczej „Uruchom jako -> Maven buduj ...”) bez problemów. Ale gdy tylko wykonam polecenie „Maven -> Zaktualizuj projekt”, otrzymuję biblioteki JRE, jak wspomniano, i Eclipse nie może zbudować projektu. Jednak nadal mogę budować za pomocą Mavena. Po dodaniu maven.compiler.sourcewłaściwości, jak wspomniano w powyższej odpowiedzi, wszystko działa poprawnie. Moja wersja m2e to 1.7.1-20161104-1805.
Antares42,
1

W moim przypadku (stare JBoss Developer Studio) problem polegał na tym, że środowiska JRE nie zawierały 1.8 (tylko 1.7). Kiedy zmieniłem maven-compiler-pluginwersję na 1.7 i wykonałem projekt aktualizacji Maven, zaktualizowałem bibliotekę systemową Eclipse JRE do 1.7. wprowadź opis obrazu tutaj

Tak więc rozwiązaniem jest pobranie nowszej wersji IDE, która zawiera wbudowane środowisko JRE w wersji 1.8 lub nowszej, albo próba zainstalowania go ręcznie (patrz https://stackoverflow.com/a/35204314 )

Blindcodifier9734
źródło
0

Pozwalam sobie zaktualizować ten temat za pomocą Java 11.

Zainstalowałem OpenJDK11 na moim komputerze i chciałem użyć go w aplikacji.

Miałem kłopoty, ponieważ Eclipse zawsze zmieniało moje JRE na JavaSE-1.5, kiedy aktualizowałem swój projekt za pomocą Maven.

Ustawiłem wszystko tak, jak powiedziałeś, ale zawsze wybierałem bezpośrednio w mojej ścieżce kompilacji Java „java-11-openjdk.x86_64” jako jedno z moich JRE Alternante. Naprawiłem swój problem wybierając w "Środowisku wykonawczym" JavaSE-10 (ale trzeba na nią dwukrotnie kliknąć, a następnie wybrać jako kompatybilny JRE swoją wersję OpenJDK11), jak pokazano na obrazku. Konfiguracja środowiska wykonawczego

Dzięki temu projekt będzie wykorzystywał Javę 11 (obrazek), ale musisz napisać 10 dla wersji java w pom.xml, a także ustawić java 10 na aspektach projektu.

Claeyssic
źródło
0

Rozwiązałem problem z instalacją aktualizacji eclipse „JAVA 12” z rynku. To sprawia, że ​​moje zaćmienie przechodzi z Keplera do Luny.

Potem mogłem ustawić 1.8 jako standardowy JDK, naprawiając problem "aktualizacji Mavena".

Andrea La Rosa
źródło
-3

Zmieniłem Eclipse z keplera na neon, a następnie zaktualizowałem mój projekt za pomocą Maven -> Update Project.

pudża
źródło