web-dev-qa-db-fra.com

Pourquoi le projet Maven importé dans Eclipse utilise-t-il Java 1.5 au lieu de Java 1.6 par défaut et comment puis-je m'assurer que ce n'est pas le cas?

J'ai importé un projet Maven et il utilisait Java 1.5 même si j'ai 1.6 configuré en tant que mon Eclipse par défaut Preferences->Java->Installed JREs.

Lorsque j'ai modifié le projet Maven pour qu'il utilise le JRE 1.6, il restait toujours les erreurs de construction de ce projet alors que le projet utilisait Java 1.5 (j'ai décrit ces erreurs de génération plus tôt dans: J'ai des erreurs de construction avec m2Eclipse mais pas avec maven2 sur la ligne de commande - mon m2Eclipse est-il mal configuré? )

Je vais supprimer le projet et réessayer, mais je veux m'assurer cette fois qu'il utilise Java 1.6 dès le début pour voir si cela élimine les problèmes de construction.

Comment puis-je m'assurer que le projet utilise Java 1.6 lorsque je l'importe?

208
Chris Collins

Le plug-in m2Eclipse n'utilise pas les valeurs par défaut d'Eclipse, le plug-in m2Eclipse déduit les paramètres du POM. Donc, si vous souhaitez qu'un projet Maven soit configuré pour utiliser les paramètres Java 1.6 lors de l'importation sous Eclipse, configurez le maven-compiler-plugin correctement, comme je l'ai déjà suggéré:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

Si votre projet est déjà importé, mettez à jour la configuration du projet (clic droit sur le projet puis Configuration du projet de mise à jour Maven V).

243
Pascal Thivent

J'ai ajouté ceci à mon pom.xml sous la description du projet et cela a fonctionné:

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>
30
hogi

Je voulais ajouter quelque chose à la réponse déjà fournie. maven-compiler-plugin par défaut compilera votre projet en utilisant Java 1.5, qui est l'endroit où m2e obtient ses informations.

C'est pourquoi vous devez déclarer explicitement le maven-compiler-plugin dans votre projet avec autre chose que 1.5. Votre pom.xml effectif utilisera implicitement le jeu par défaut défini dans le maven-compiler-pluginpom.xml.

28
Nicholas
<project>

    <!-- ... -->

    <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
27
pitchblack408

Voici la cause première de Java 1.5:

Notez également qu'actuellement, le paramètre source par défaut est 1,5 et le paramètre cible par défaut est 1,5, indépendamment du JDK avec lequel vous exécutez Maven. Si vous souhaitez modifier ces valeurs par défaut, vous devez définir la source et la cible.

Référence: plugin Apache Mavem Compiler

Voici les détails:

Pom.xml simple

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.Apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 
             http://maven.Apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

    <groupId>com.pluralsight</groupId>
    <artifactId>spring_sample</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

Le plugin suivant provient d’une version développée de POM (Effective POM),

Ceci peut être obtenu par cette commande à partir de la ligne de commande C:\mvn help:effective-pom Je viens de mettre ici un petit extrait au lieu d'un pom complet.

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>default-compile</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      <execution>
        <id>default-testCompile</id>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Même ici, vous ne voyez pas où est la version Java définie, permet de creuser davantage ...

Téléchargez le plugin, plug-in Apache Maven Compiler "3.1 , car il est disponible dans le fichier jar, et ouvrez-le dans n’importe quel outil de compression de fichier comme 7-Zip

Traverser le bocal et la découverte

plugin.xml

fichier dans le dossier

maven-compiler-plugin-3.1.jar\META-INF\maven \

Maintenant, vous verrez la section suivante dans le fichier,

      <configuration>
    <basedir implementation="Java.io.File" default-value="${basedir}"/>
    <buildDirectory implementation="Java.io.File" default-value="${project.build.directory}"/>
    <classpathElements implementation="Java.util.List" default-value="${project.testClasspathElements}"/>
    <compileSourceRoots implementation="Java.util.List" default-value="${project.testCompileSourceRoots}"/>
    <compilerId implementation="Java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
    <compilerReuseStrategy implementation="Java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
    <compilerVersion implementation="Java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
    <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
    <debuglevel implementation="Java.lang.String">${maven.compiler.debuglevel}</debuglevel>
    <encoding implementation="Java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
    <executable implementation="Java.lang.String">${maven.compiler.executable}</executable>
    <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
    <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
    <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
    <generatedTestSourcesDirectory implementation="Java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
    <maxmem implementation="Java.lang.String">${maven.compiler.maxmem}</maxmem>
    <meminitial implementation="Java.lang.String">${maven.compiler.meminitial}</meminitial>
    <mojoExecution implementation="org.Apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution>
    <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
    <outputDirectory implementation="Java.io.File" default-value="${project.build.testOutputDirectory}"/>
    <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
    <showWarnings implementation="boolean" default-value="false">${maven.compiler.showWarnings}</showWarnings>
    <skip implementation="boolean">${maven.test.skip}</skip>
    <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
    <source implementation="Java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
    <target implementation="Java.lang.String" default-value="1.5">${maven.compiler.target}</target>
    <testSource implementation="Java.lang.String">${maven.compiler.testSource}</testSource>
    <testTarget implementation="Java.lang.String">${maven.compiler.testTarget}</testTarget>
    <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
    <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
    <mavenSession implementation="org.Apache.maven.execution.MavenSession" default-value="${session}"/>
    <session implementation="org.Apache.maven.execution.MavenSession" default-value="${session}"/>
  </configuration>

Regardez le code ci-dessus et découvrez les 2 lignes suivantes

    <source implementation="Java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <target implementation="Java.lang.String" default-value="1.5">${maven.compiler.target}</target>

Bonne chance.

6
rogue lad

Votre JRE a probablement été défini dans la configuration d'exécution. Suivez ces étapes dans Eclipse pour modifier le JRE de génération.

1) Faites un clic droit sur le projet et sélectionnez Run As> Run Configurations

2) Dans la fenêtre Run Configurations, sélectionnez la configuration de construction de votre projet dans le panneau de gauche. Sur la droite, vous verrez différents onglets: Principal, JRE, Actualiser, Source, ...

3) Cliquez sur l'onglet JRE, vous devriez voir quelque chose comme ça

enter image description here

4) Par défaut, JRE par défaut (le JRE sélectionné par défaut sous Préférences-> Java-> JRE installés) sera utilisé. Si vous souhaitez utiliser un autre JRE installé, cochez la case Autre JRE et sélectionnez votre JRE préféré dans le menu déroulant.

6
Tony Vu

La solution la plus simple dans Springboot

Je vais vous donner le plus simple si vous utilisez Springboot:

<properties>
  <Java.version>1.8</Java.version>
</properties>

Ensuite, faites un clic droit sur votre projet Eclipse: Maven> Mettre à jour le projet> Mettre à jour la configuration du projet à partir de pom.xml.

Cela devrait faire.

2
sancho21

Paramètres spécifiques au projet

Un autre endroit où cela peut mal tourner est dans les paramètres spécifiques au projet, dans Eclipse.

  1. propriétés du projet: cliquez sur votre projet et l’un des suivants:

    • Alt + Entrée
    • Menu> Projet> Propriétés
    • clic droit sur votre projet> propriétés du projet (dernier élément du menu)
  2. cliquez sur "Compilateur Java"

  3. Décochez la case "Activer les paramètres spécifiques au projet" (ou modifiez-les tous manuellement).

En raison des exigences des clients, nous leur avons permis de conserver nos projets dans la version 1.6. Lorsque nous avons eu besoin de passer à la version 1.7, nous avons eu du mal à changer la version de Java:

  • projet POM
  • Eclipse Workspace par défaut
  • paramètres spécifiques au projet
  • exécution de la machine virtuelle (1.6 a été utilisé pour tout)
2
manuelvigarcia

J'ai constaté que mon problème était lié au fichier .project et .classpath faisant référence à Java1.5 comme JRE par défaut.

<classpathentry kind="con" path="org.Eclipse.jdt.launching.JRE_CONTAINER/org.Eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
    <attributes>
        <attribute name="owner.project.facets" value="Java"/>
    </attributes>
</classpathentry>

En fermant le projet, en supprimant les fichiers, puis en réimportant en tant que projet Maven, j'ai pu configurer correctement le projet pour qu'il utilise l'environnement de travail JRE ou le jdk correspondant sans qu'il ne revienne à la version 1.5. Ainsi, évitez de vérifier dans votre SVN les fichiers .project et .classpath

J'espère que cela aide les autres.

1
iowatiger08

Une autre raison possible si vous utilisez Tycho et Maven pour construire des bundles, car vous avez un environnement d'exécution incorrect (Bundle-RequiredExecutionEnvironment) dans le fichier manifeste (manifest.mf) défini. Par exemple:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Engine Plug-in
Bundle-SymbolicName: com.foo.bar
Bundle-Version: 4.6.5.qualifier
Bundle-Activator: com.foo.bar.Activator
Bundle-Vendor: Foobar Technologies Ltd.
Require-Bundle: org.Eclipse.core.runtime,
 org.jdom;bundle-version="1.0.0",
 org.Apache.commons.codec;bundle-version="1.3.0",
 bcprov-ext;bundle-version="1.47.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.5
Export-Package: ...
...
Import-Package: ...
...

Dans mon cas, tout le reste était ok. Les plugins du compilateur (normal maven et tycho également) ont été configurés correctement, mais m2 a encore généré l'ancien niveau de conformité en raison du manifeste. Je pensais partager l'expérience.

1
Gábor Lipták

Pour changer la version de JDK, vous pouvez faire:

1- Projet> Propriétés
2- Allez à Java chemin de construction
3- Dans les bibliothèques, sélectionnez JRE System ... et cliquez sur Edit
4- Choisissez votre version appropriée et validez

0
Achref EL Mouelhi

Si vous voulez vous assurer que les projets nouvellement créés ou importés dans Eclipse utilisent une version par défaut de Java autre que Java 1.5, vous pouvez modifier la configuration dans le plugin maven-compiler.

  • Allez dans le dossier .m2/repository/org/Apache/maven/plugins/maven-compiler-plugin/3.1
  • Ouvrez maven-compiler-plugin-3.1.jar avec un programme Zip.
  • Allez sur META-INF/maven et ouvrez le fichier plugin.xml
  • Dans les lignes suivantes:
    <source implementation = "Java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </ source>
    <target implementation = "Java.lang.String" default-value = "1.5"> $ {maven.compiler.target} </ target>

  • changez la valeur par défaut en 1.6 ou 1.8 ou ce que vous voulez.

  • Enregistrez le fichier et assurez-vous qu’il est réécrit dans le fichier Zip.

Désormais, tous les nouveaux projets Maven utilisent la version Java que vous avez spécifiée.

Les informations proviennent du billet suivant: https://sandocean.wordpress.com/2019/03/22/directly-generating-maven-projects-in-Eclipse-with-Java-version-newer-than- 1-5 /

0
user1201626