Die Java-Version wechselt nach dem Maven-Update automatisch zu Java 1.5


120

Ich benutze Eclipse als IDE. Wenn ich mit der rechten Maustaste auf das Projekt klicke und dann auf Maven klicke, aktualisiere ich meine Java-Version auf 1.5. Folgendes habe ich bisher getan: Ich habe alle hier aufgeführten Schritte ausgeführt

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

  1. Ich habe "Java Build Path" in "Workspace Standard jre 1.8.0_25" geändert.
  2. Dann wurde "Java Compiler" in 1.8 geändert
  3. Dann geändert "Projekt Facetten"> Java> 1.8
  4. Die Java-Version von pom.xml wurde in 1.8 geändert
    <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>

Nach all dem, wenn ich auf "Maven Update" klicke, ändert sich meine Java-Version automatisch auf 1.5. Auch in den obigen Schritten wird die Version der ersten beiden Schritte automatisch auf 1.5 geändert. Wie kann ich das beheben?

Antworten:


222

Öffnen Sie Ihre pom.xmlDatei und fügen Sie die folgenden Zeilen hinzu:

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

Wo 1.8ist die Java-Version Ihres aktuellen JDK / JRE? Eine andere Möglichkeit, dies zu tun, ist das Hinzufügen eines <build>mit dem maven-compile-pluginas

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

BEARBEITEN

Wenn Sie nach einer Möglichkeit suchen, es mit Java-Versionen 9+ zum Laufen zu bringen, schauen Sie sich bitte die Antwort von @ JDelorean hier unten an und vergessen Sie nicht, ihm ebenfalls eine positive Bewertung zu geben :)


4
Ich glaube, ich habe bereits den zweiten Weg eingeschlagen und auch den Code gepostet. Sehen Sie nicht, was Sie in diesem Code geändert haben
asdlfkjlkj

1
Ja. Als ich antwortete, haben Sie den Code nicht veröffentlicht. Fügen Sie also den ersten Teil meiner Antwort hinzu. Das propertiesTag. Wenn Ihr POM bereits ein propertiesTag hat, fügen Sie einfach die Tags hinzu, es sollte gut funktionieren.
Jorge Campos

@asdlfkjlkj Ihre Eclipse verwendet eingebetteten Maven oder eine externe Maven-Installation? Eine andere Frage, die Ihre Sonnenfinsternis auf eine JRE oder ein JDK zeigt? Dies sind zwei Fragen zu Eclipse + Maven, die den Unterschied ausmachen.
Jorge Campos

@JorgeCampos - Ich habe eine neue Frage gestellt. Hast du eine Idee dazu? stackoverflow.com/questions/42855512/…
Aishu

@JorgeCampos wo finde ich das maven-complier-pluginzum hinzufügen <build>? danke
の の 夢

23

Hatte das gleiche Problem bei der Installation von Java 9. Mein Projekt war standardmäßig auf die J2SE-1.5-Ausführungsumgebung eingestellt. Seltsamerweise wird die Java 9-Konformitätsstufe nicht wie in früheren Versionen, dh "1.8", sondern als "9" bezeichnet. Also musste ich meine Eigenschaften und die Konfiguration des Maven-Compiler-Plugins entsprechend angeben:

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

und

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

Dies scheint das Problem gelöst zu haben.


1
Gilt auch für Java 10+ und möchte hinzufügen, dass in einem Maven-Projekt mit mehreren Modulen nur das übergeordnete POM erforderlich ist.
mmeany

Ab Java 9 gibt es eine neue --release <version>Compileroption, die gegenüber Quelle / Ziel bevorzugt wird. Dies kann mit der maven.compiler.releaseEigenschaft oder <release>Einstellung im Maven-Compiler-Plugin konfiguriert werden . Siehe: stackoverflow.com/questions/43102787/…
Thomas Taylor

7

Die Hauptursache für dieses Problem ist, dass Eclipse aus irgendeinem Grund beim Generieren / Aktualisieren der .classpath-Datei aus dem pom keinen gültigen Wert für die maven.compiler.sourceEigenschaft auflösen kann org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5.

Wie von @ jorge-campos fachmännisch beantwortet , gibt es mehrere Möglichkeiten, diese Eigenschaft festzulegen .

Allerdings Antwort Jorges nicht erscheinen , für mich zu arbeiten. Hier waren meine Einstellungen:

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

...

Genau. ${java.version}wird niemals in die (völlig andere) Eigenschaft aufgelöst javaVersionund Eclipse ignorierte die Eigenschaft und verwendete die Standardeinstellung.

Das bringt mich zurück zu dem Teil " aus irgendeinem Grund ", mit dem ich eröffnet habe; Entwicklerdummheit kann einer dieser Gründe sein.


1
So ändern Sie org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName

Downvoting für die Aussage "Entwicklerdummheit kann einer dieser Gründe sein".
Luke Hutchison

In meinem Fall verwende ich Maven / Tycho, um Eclipse-Plugins zu erstellen, und der obige Standard wurde letztendlich von der in der Datei MANIFEST.MF angegebenen Ausführungsumgebung abgeleitet. Das Ändern der Ausführungsumgebung auf JavaSE-1.8 hat das Problem behoben.
mat101

3

Fügen Sie diese Zeilen zu Ihrer pom.xml hinzu und klicken Sie mit der rechten Maustaste auf Ihre JRE-Systembibliothek -> Eigenschaften -> Stellen Sie Ihre korrekte Ausführungsumgebung auf Java 1.8 oder die Version ein, die Sie festlegen möchten.

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

Ihre Antwort fehlt <build> <plugins> ... Ihre Antwort hier ... </ plugins> </ build>, was die Antwort für die Leute klarer macht.
Kyle Bridenstine

1

Ich hatte dieses Problem. In meinem Fall befanden sich die oben erwähnten <properties> -Tags und verschachtelten Tags, die Jorge Campos erwähnt hat, an der falschen Stelle. Wenn ich sie zwischen die Tags <hostversion> und <dependencies> in der Datei pom.xml setze, wird dieses Verhalten beendet.

Dies kann in Eclipse übernommen werden, wenn die Validierung dieser Dateien aktiviert ist.


1

Ich stoße auf einem meiner Teamkollegen auf ein ähnliches Problem. Er benutzte eine alte Version von Eclipse, ich glaube, er benutzte Keppler. Projekt nach der Aktualisierung ändern Sie die JRE-Version auf 1.5.

Durch einfaches Aktualisieren von Eclipse auf die neueste Version wird dieses Problem behoben.


Yeah Nein. Ich verwende Neon, meine Arbeitsbereichseinstellungen sind alle 1.8, aber wenn ich ein Maven-Projekt importiere (oder aktualisiere), besteht Eclipse darauf, J2SE-1.5 zu verwenden.
Antares42

@ Antares42 können Sie ohne Probleme über die Befehlszeile erstellen? Welche m2e-Version verwenden Sie?
user902383

1
Ich kann ohne Probleme über die Befehlszeile (oder besser "Ausführen als -> Maven Build ...") erstellen. Sobald ich jedoch "Maven -> Projekt aktualisieren" mache, erhalte ich die JRE-Bibliotheken wie erwähnt und Eclipse kann das Projekt nicht erstellen. Ich kann trotzdem mit Maven bauen. Sobald ich eine maven.compiler.sourceEigenschaft wie in der obigen Antwort erwähnt hinzufüge , funktioniert alles einwandfrei. Meine m2e-Version ist 1.7.1-20161104-1805.
Antares42

1

In meinem Fall (altes JBoss Developer Studio) war das Problem, dass die JRE-Umgebungen nicht 1.8 (nur 1.7) enthielten. Als ich die maven-compiler-pluginVersion auf 1.7 umstellte und ein Maven-Update-Projekt durchführte, wurde die Eclipse JRE-Systembibliothek auf 1.7 aktualisiert. Geben Sie hier die Bildbeschreibung ein

Die Lösung besteht also darin, entweder eine neuere IDE-Version mit einer integrierten JRE-Umgebung ab Version 1.8 zu erhalten oder sie manuell zu installieren (siehe https://stackoverflow.com/a/35204314 ).


0

Ich erlaube mir, dieses Thema mit Java 11 zu aktualisieren.

Ich habe OpenJDK11 auf meinem Computer installiert und wollte es in einer App verwenden.

Ich hatte Probleme, weil Eclipse meine JRE immer auf JavaSE-1.5 änderte, wenn ich mein Projekt mit Maven aktualisierte.

Ich hatte alles wie gesagt festgelegt, aber ich habe in meinem Java-Erstellungspfad "java-11-openjdk.x86_64" immer direkt eine meiner alternativen JRE ausgewählt. Ich habe mein Problem behoben, indem ich in "Ausführungsumgebung" JavaSE-10 ausgewählt habe (aber Sie müssen darauf doppelklicken und dann Ihre OpenJDK11-Version als kompatible JRE auswählen) (siehe Abbildung). Setup der Ausführungsumgebung

Das Projekt wird dank dessen Java 11 verwenden (Bild), aber Sie müssen 10 für die Java-Version in die pom.xml schreiben und auch Java 10 in den Projektfacetten einstellen.


0

Ich habe das Problem bei der Installation des Eclipse-Updates "JAVA 12" vom Markt behoben. Dadurch geht meine Sonnenfinsternis von Kepler nach Luna über.

Danach konnte ich 1.8 als Standard-JDK festlegen und das Problem "Maven Update" beheben.


-3

Ich habe Eclipse von Kepler auf Neon geändert und dann mein Projekt mit Maven -> Projekt aktualisieren aktualisiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.