web-dev-qa-db-fra.com

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

Avec 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 du projet par défaut 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 de projet repasse à "utiliser le niveau de langue du projet" et je dois modifier à nouveau ces paramètres et encore.

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

109
Quentin

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

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

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

Je pense que cela a à voir avec un conflit conceptuel entre le plugin du compilateur Maven et l'idée d'IntelliJ. Apparemment, les versions les plus récentes du plug-in du compilateur ont un niveau par défaut de 1,5 (voir http://maven.Apache.org/plugins/maven-compiler-plugin/ ). Ainsi, si le plug-in du compilateur est utilisé dans un projet et que le niveau du compilateur n'est pas défini explicitement dans le fichier pom.xml, chaque fois que le POM est retraité, le niveau revient au niveau par défaut. 

Il y a donc un conflit conceptuel qui est ignoré par Intellij IDEA. Le IDE permet toujours de définir les paramètres du projet et du module, mais ne donne aucun avertissement ni aucun retour indiquant que ce paramètre est contrôlé par pom.xml. Les solutions consisteraient soit à autoriser explicitement le remplacement du paramètre du plug-in du compilateur POM (ce qui n'est 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 de la IDE lorsque ce paramètre est en effet. 

La solution actuelle consiste à définir le niveau de compilateur souhaité dans le plug-in du compilateur dans le pom, la réimportation, plutôt que d'essayer de le définir dans les paramètres du module.

20
Peter N. Steinmetz

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

Première- Ajouter des propriétés

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

second- 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 aide.

6
Anuj Teotia

Je suis en train de mettre à niveau un projet de JDK 8 à JDK 10+. J'avais les propriétés du compilateur spécifiées correctement 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 qui limitait le niveau de langue à <= 8. 

Pour corriger, j'ai mis à jour la propriété 'JDK pour l'importateur' sous Paramètres -> Construire, Exécution, Déploiement -> Outils de compilation -> Maven -> Importer pour utiliser JDK 11.

 enter image description here

1
danw

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

J'avais besoin d'ouvrir le fichier <project-name>.iml et de changer la version du 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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Mis à jour:

<?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. Je n'ai à aucun moment spécifié une version de JDK pour Java 1.5.

1
kleinfreund

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

Ainsi, même si les autres packages ressemblent davantage à libraries , je n’ai pas pu utiliser la syntaxe Java 8.

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

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

1
user3677636

Il me fallait ensuite franchir une étape supplémentaire en plus de définir les propriétés de construction de maven , ajouter le plugin maven-compiler-plugin , et modifier la version de Java dans le fichier .iml . (chacun documenté déjà dans les autres réponses). Vous devez également définir la version du compilateur dans les paramètres .

0
hosford42

Pour moi, la solution consistant à mettre à jour le POM (plugins et propriétés) vers la version de compilateur Java requise (1_7 dans mon cas) fonctionnait ..____. 1_5 comme expliqué ci-dessus) a une version JDK de 1_5, elle remplace toujours la version pom.

J'ai supprimé le dossier .idea manuellement et importé le module dans IntelliJ avec une réimportation à partir 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 mise à jour du JDK (1_7 dans mon cas). 

0
Shirish Sakhare