arrêtez IntelliJ IDEA pour changer le niveau de langue Java à chaque fois que le pom est rechargé (ou changez le niveau de langue par défaut du projet)

145

En utilisant IntelliJ 12, j'ai un projet java et j'utilise maven avec un pom.xml. Mon projet utilise java8, mais il semble que le niveau de langue par défaut du projet ait été défini sur 6 lors de l'importation du projet.

Je peux changer le niveau de langue à 8.0 (F4 -> Modules -> Niveau de langue) cependant chaque fois que je modifie mon pom.xml, le niveau du projet est rétabli à "utiliser le niveau de langue du projet", et je dois modifier à nouveau ces paramètres et encore.

Dois-je ajouter quelque chose au pom.xml pour définir le niveau de langue par défaut sur 8,0?

Quentin
la source
2
Votre pom spécifie-t-il le niveau source et cible dans la configuration du plugin du compilateur?
Mark Rotteveel
oui, la source et la cible sont réglées sur 1.8. Cependant, il n'a pas été spécifié lors de l'importation du projet
Quentin
@Quentin Dans une telle situation, il peut être le plus simple de recloner le projet dans un nouvel emplacement et de laisser IntelliJ l'importer à nouveau.
Thorbjørn Ravn Andersen

Réponses:

174

Selon le commentaire de Mark, voici comment procéder:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
vikingsteve
la source
10
le plugin est présent dans la cible pom, wuth 1.8, mais cela ne change rien :(
Quentin
2
Avez-vous activé l'importation automatique de votre maven pom? Avez-vous vérifié les poms des parents (et des grands-parents), y a-t-il des paramètres 1.6 qui pourraient être en conflit?
vikingsteve
1
En effet le projet parent est défini avec spring-boot-starter-parent-1.1.9.RELEASE.pom.xml et dans pluginManagement le maven-compiler-plugin est mis à 1.6 ... J'ai essayé de remplacer ces paramètres sans aucun succès. On dirait que spring boot 1.2.RC n'inclut plus maven-compiler-plugin, je vais essayer. - l'importation automatique est activée.
Quentin
Super, ça pourrait être pourquoi. Si vous spécifiez la même version du plugin du compilateur maven, il peut être possible de remplacer les paramètres source / cible. Essayez peut-être cela dans la racine de votre projet pom.xml.
vikingsteve
2
Dans mon cas, cela n'a pas fonctionné. J'ai dû supprimer le paramètre mentionné dans cette réponse et ajouter à la place ce qui suit:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
génonyme
99

Une version plus courte de la réponse de vikingsteve est:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
DieterDP
la source
6
Un ennui en moins!
Artur Cichosz
4
Ce n'était pas seulement une version courte mais nécessaire dans mon cas. La réponse de vikingsteve n'a pas fonctionné pour moi. J'ai donc supprimé ce paramètre et utilisé celui-ci.
génonyme
23

Je pense que cela a à voir avec un conflit conceptuel entre le plugin du compilateur Maven et l'idée d'IntelliJ. Apparemment, les nouvelles versions du plugin du compilateur ont un niveau par défaut de 1.5 (voir http://maven.apache.org/plugins/maven-compiler-plugin/ ). Donc, si le plugin du compilateur est utilisé dans un projet et que le niveau du compilateur n'est pas explicitement défini dans le pom.xml, chaque fois que le POM est retraité, le niveau revient à la valeur par défaut.

Il y a donc un conflit conceptuel ignoré par Intellij IDEA. L'EDI permet toujours de définir les paramètres du projet et du module, mais ne fournit aucun avertissement ni retour d'information indiquant que ce paramètre est contrôlé par pom.xml. Les solutions consisteraient soit à autoriser explicitement le remplacement du paramètre du plugin du compilateur POM (peut-être pas judicieux car ce qui se passe ensuite lorsque vous utilisez maven sur la ligne de commande), soit à désactiver les contrôles dans l'EDI lorsque ce paramètre du POM est en vigueur.

La solution à l'heure actuelle est de définir le niveau de compilation souhaité dans le plugin du compilateur dans le pom, la réimportation, plutôt que d'essayer de le définir dans les paramètres du module.

Peter N. Steinmetz
la source
1
D'accord. Le manque de retour d'information indiquant que les paramètres d'IDEA vont simplement être ignorés et réimportés à partir du POM est très déroutant, en particulier lors de l'utilisation d'un POM parent.
Gillfish
9

Je mets à niveau un projet de JDK 8 vers JDK 10+. J'ai fait spécifier correctement les propriétés du compilateur comme suit:

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

Cependant, le projet Idea continuerait à réinitialiser le niveau de langue à 8.

Finalement, j'ai compris que le processus d'importation Maven d'Idea utilisait JDK 8 pour importer le projet, ce qui limitait le niveau de langue à <= 8.

Pour corriger, j'ai mis à jour la propriété 'JDK pour l'importateur' sous Paramètres -> Construction, exécution, déploiement -> Outils de construction -> Maven -> Importation pour utiliser JDK 11.

entrez la description de l'image ici

danw
la source
J'ai résolu mon problème. On dirait qu'IntelliJ a mis à jour son JRE interne avec les versions ultérieures (quelque part vers 2019.2). Assez difficile à retrouver ...
Hasan Aslam
8

Il y a deux façons de faire cela, ajoutez l'une ou l'autre dans votre fichier pom.xml:

Tout d'abord, ajouter des propriétés

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

deuxième - Ajouter un plugin

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Faites-moi savoir si cela vous aide.

Anuj Teotia
la source
J'ai fait les deux et le compilateur est toujours en cours de réinitialisation à 1,5 chaque fois que j'essaie d'exécuter mvn compile à partir d'IntelliJ. Cependant, cela fonctionne correctement lorsqu'il est exécuté à partir de la ligne de commande en dehors d'IntelliJ.
user26270
1
dans IntelliJ, n'oubliez pas de réimporter les paramètres maven après la modification. La solution a fonctionné pour moi.
Pierluigi Vernetto
4

Aucune des solutions n'a aidé dans mon cas. Je n'ai pas besoin de spécifier de version Java dans mon fichier pom.xml.

J'avais besoin d'ouvrir le <project-name>.imlfichier et d'y changer la version JDK.

Original:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Actualisé:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Cela n'a aucun sens. À aucun moment je n'ai spécifié une version JDK pour Java 1.5.

Kleinfreund
la source
Cela, en soi, a résolu le problème pour moi dans IntelliJ 2019.3, sans exiger que je change quoi que ce soit dans mon pom ou ailleurs. De même, je n'ai jamais spécifié JDK 1.5 nulle part.
Michael Christoff
Exemple: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León
1

J'ai beaucoup lutté avec ce problème, en raison de la création de microservices avec Dropwizard. Finalement, j'ai découvert que j'avais mes propriétés de construction dans le mauvais fichier pom (le service principal pom.xml).

Ainsi, même si les autres packages ressemblent plus à des bibliothèques , je n'ai pas pu utiliser la syntaxe Java 8.

Lorsque j'ai refactoré le plugin de construction dans le .pom.xmlfichier "global" ", tous les conteneurs enfants ont pu utiliser la nouvelle syntaxe.

Peut aider quelqu'un ayant des problèmes avec des projets multi-conteneurs

user3677636
la source
0

Pour moi, la solution de mise à jour du POM (plugins plus propriétés) vers la version requise du compilateur Java (1_7 dans mon cas) a fonctionné. Cependant, comme le fichier .iml pour chaque projet a été généré avec pom d'origine (avec la version de compilateur par défaut de 1_5 comme expliqué par quelqu'un ci-dessus) a une version JDK de 1_5, cela remplace toujours la version de pom.

J'ai supprimé le dossier .idea manuellement et importé le module dans IntelliJ avec une réimportation du pom mis à jour. Lorsque j'ai réimporté le module à partir du POM mis à jour, je pouvais voir que les fichiers iml avaient la version JDK mise à jour (1_7 dans mon cas).

Shirish Sakhare
la source