La version Java passe automatiquement à Java 1.5 après la mise à jour de Maven


121

J'utilise eclipse comme IDE. Lorsque je clique avec le bouton droit sur le projet, puis que je clique sur maven, je mets à jour ma version java en 1.5. Voici ce que j'ai fait jusqu'à présent, j'ai suivi toutes les étapes listées ici

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

  1. J'ai changé "Java build path" en "workspace default jre 1.8.0_25"
  2. Puis changé "java compiler" en 1.8
  3. Puis changé "facettes du projet"> java> 1.8
  4. Changement de la version java de pom.xml en 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>

Après tout cela, lorsque je clique sur "Maven update", ma version java passe automatiquement à 1.5. Toujours dans les étapes ci-dessus, la version des deux premières étapes passe également à 1.5 automatiquement. Comment puis-je réparer cela?

Réponses:


222

Ouvrez votre pom.xmlfichier et ajoutez-y les lignes suivantes:

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

Où se 1.8trouve la version java de votre JDK / JRE actuel. Une autre façon de faire est d'ajouter un <build>avec le 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>

ÉDITER

Si vous cherchez un moyen de le faire fonctionner avec les versions 9+ de Java, veuillez jeter un œil à la réponse de @ JDelorean ici et n'oubliez pas de lui donner un vote favorable :)


4
Je pense que j'ai déjà fait la deuxième manière et j'ai également posté le code. Ne voyez pas ce que vous avez changé dans ce code
asdlfkjlkj

1
Ouais. Quand j'ai répondu, vous n'avez pas publié le code. Alors, ajoutez la première partie de ma réponse. La propertiesbalise. Si votre POM a déjà une propertiesbalise, ajoutez simplement les balises à l'intérieur, cela devrait fonctionner correctement.
Jorge Campos

@asdlfkjlkj votre eclipse utilise maven intégré ou une installation maven externe? Une autre question que votre éclipse pointe vers un JRE ou un JDK? Ce sont deux questions concernant eclipse + maven qui font toute la différence.
Jorge Campos

@JorgeCampos - J'ai posté une nouvelle question. Avez-vous une idée à ce sujet? stackoverflow.com/questions/42855512/…
Aishu

@JorgeCampos où puis-je trouver le maven-complier-pluginpour ajouter le <build>? merci
夢 の の 夢

23

J'ai eu le même problème lorsque j'ai installé Java 9. Mon projet serait par défaut sur l'environnement d'exécution J2SE-1.5. Curieusement, le niveau de conformité Java 9 n'est pas référencé comme les versions précédentes, c'est-à-dire "1.8", mais comme "9". J'ai donc dû fournir mes propriétés et la configuration du plugin du compilateur Maven en conséquence:

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

et

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

Cela semble avoir résolu le problème.


1
Également vrai pour Java 10+ et souhaite ajouter que dans un projet Maven multi-module, il n'est requis que dans le POM parent.
mmeany

Avec Java 9 et supérieur, il existe une nouvelle --release <version>option de compilateur, qui est préférable à source / cible. Cela peut être configuré avec une maven.compiler.releasepropriété ou un <release>paramètre dans le plugin maven-compiler. Voir: stackoverflow.com/questions/43102787/…
Thomas Taylor

7

La cause première de ce problème est que si, pour une raison quelconque, Eclipse ne peut pas résoudre une valeur valide pour la maven.compiler.sourcepropriété lors de la génération / mise à jour du fichier .classpath à partir du pom, il utilisera simplement par défaut org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5.

Comme l'a répondu de manière experte @ jorge-campos , il existe plusieurs façons de définir cette propriété.

Cependant, la réponse de Jorge ne semblait pas fonctionner pour moi. Voici mes paramètres:

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

...

Exactement. ${java.version}est ne va pas résoudre le (complètement différent) propriété javaVersionet Eclipse ignoré la propriété et utilisé par défaut.

Ce qui me ramène à la partie " pour une raison quelconque " avec laquelle j'ai commencé; la stupidité des développeurs peut être l'une de ces raisons.


1
Comment changer org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName

Un vote négatif pour avoir dit "la stupidité des développeurs peut être l'une de ces raisons".
Luke Hutchison

Dans mon cas, j'utilise Maven / Tycho pour créer des plugins Eclipse, et la valeur par défaut ci-dessus était finalement dérivée de l'environnement d'exécution spécifié dans le fichier MANIFEST.MF. Le changement de l'environnement d'exécution vers JavaSE-1.8 a résolu le problème.
mat101

3

Ajoutez ces lignes à votre pom.xml, puis cliquez avec le bouton droit sur votre bibliothèque système JRE -> Propriétés -> Définissez votre environnement d'exécution correct sur Java 1.8 ou la version que vous souhaitez définir.

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

Votre réponse manque <build> <plugins> ... votre réponse ici ... </plugins> </build> qui en fait une réponse plus claire pour les gens.
Kyle Bridenstine

1

J'ai eu ce problème. Dans mon cas, la balise <properties> et les balises imbriquées que Jorge Campos mentionne ci-dessus étaient au mauvais endroit. Si je les mets entre les balises <hostversion> et <dependencies> dans le fichier pom.xml, alors ce comportement s'est arrêté.

Cela peut être récupéré dans Eclipse si la validation de ces fichiers est activée.


1

Je rencontre un problème similaire sur l'un de mes coéquipiers. Il utilisait l'ancienne version d'Eclipse, je crois qu'il utilisait Keppler. Projet après avoir été mis à jour, changez la version de JRE en 1.5.

Une simple mise à jour d'Eclipse vers la dernière version résout ce problème.


Ouais non. J'exécute Neon, mes paramètres d'espace de travail sont tous 1.8, mais lorsque j'importe (ou mets à jour) un projet Maven, Eclipse insiste pour utiliser J2SE-1.5.
Antares42

@ Antares42 pouvez-vous construire à partir de la ligne de commande sans aucun problème? Quelle version de m2e utilisez-vous?
user902383

1
Je peux construire en utilisant la ligne de commande (ou plutôt "Exécuter en tant que -> Maven build ...") sans problème. Mais dès que je fais "Maven -> Projet de mise à jour", j'obtiens les bibliothèques JRE comme mentionné et Eclipse ne parvient pas à construire le projet. Cependant, je peux toujours construire avec Maven. Une fois que j'ajoute unmaven.compiler.source propriété comme mentionné dans une réponse ci-dessus, tout fonctionne bien. Ma version m2e est 1.7.1-20161104-1805.
Antares42

1

Dans mon cas (ancien JBoss Developer Studio), le problème était que les environnements JRE n'incluaient pas 1.8 (seulement 1.7). Lorsque j'ai basculé la maven-compiler-pluginversion 1.7 et effectué le projet de mise à jour maven, il a mis à jour la bibliothèque système Eclipse JRE vers 1.7. entrez la description de l'image ici

La solution consiste donc soit à obtenir une version plus récente de l'EDI qui inclut un environnement JRE intégré 1.8 ou version ultérieure, soit à essayer de l'installer manuellement (voir https://stackoverflow.com/a/35204314 )


0

Je me permets de mettre à jour ce sujet avec Java 11.

J'ai installé OpenJDK11 sur mon ordinateur et je voulais l'utiliser dans une application.

J'avais des problèmes car Eclipse changeait toujours mon JRE en JavaSE-1.5 lorsque je mettais à jour mon projet avec Maven.

J'avais tout défini comme vous l'avez dit, mais je sélectionnais toujours directement dans mon chemin de construction Java "java-11-openjdk.x86_64" comme l'un de mes JRE Alternante. J'ai résolu mon problème en sélectionnant dans "Environnement d'exécution" JavaSE-10 (mais vous devez double-cliquer dessus puis choisir comme JRE compatible votre version OpenJDK11) comme indiqué sur l'image. Configuration de l'environnement d'exécution

Le projet utilisera Java 11 grâce à cela (image) mais vous devez écrire 10 pour la version java dans le pom.xml et également définir java 10 sur les facettes du projet.


0

J'ai résolu le problème en installant la mise à jour eclipse "JAVA 12" du marché. Cela fait passer mon éclipse de Kepler à Luna.

Après cela, j'ai pu définir 1.8 comme JDK standard, corrigeant le problème "maven update".


-3

J'ai changé Eclipse de kepler en néon puis mis à jour mon projet avec Maven -> Update Project.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.