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?
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).
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>
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
.
<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>
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.
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
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.
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.
Un autre endroit où cela peut mal tourner est dans les paramètres spécifiques au projet, dans Eclipse.
propriétés du projet: cliquez sur votre projet et l’un des suivants:
cliquez sur "Compilateur Java"
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:
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.
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.
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
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.
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.
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 /