web-dev-qa-db-fra.com

Spécification de la version de Java dans maven - différences entre les propriétés et le plug-in du compilateur

Je ne connais pas très bien maven et lors de mes expériences avec des projets multi-modules, je me suis demandé comment spécifier une version Java pour tous mes modules enfants dans parent maven pom. Jusqu'à aujourd'hui, je n'utilisais que:

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

mais lors de mes recherches, j'ai découvert que vous pouvez également spécifier la version Java dans le plug-in maven compiler, comme ceci:

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

Et ensuite, encapsulez ceci dans la balise de gestion des plugins pour permettre à l’enfant poms de l'utiliser. Donc, la première question est quelles sont les différences entre la définition de la version Java dans les propriétés et dans le plugin maven compiler?

Je ne trouvais pas de réponse claire, mais au cours de mes recherches, j'ai découvert que vous pouvez également spécifier la version de Java de la manière suivante:

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

qui suggèrent que le plugin du compilateur est là même si je ne le déclare pas explicitement. Exécuter les sorties de paquet mvn avec 

maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---

et quelques autres plugins que je n'ai pas déclarés. Alors, ces plugins sont-ils par défaut, une partie cachée de Maven Pom? Existe-t-il des différences entre la définition source/cible dans les propriétés et dans l'élément de configuration du plug-in maven?

Quelques autres questions sont - quelle manière devrait être utilisée (et quand si elles ne sont pas égales)? Laquelle est la meilleure pour un projet multi-module et que se passe-t-il si la version de Java spécifiée dans pom est différente de la version indiquée dans Java_HOME?

112
Plebejusz

Aucune des solutions ci-dessus n'a fonctionné pour moi tout de suite. Alors j'ai fait ce qui suit: -

  1. Ajoutée

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

    dans pom.xml

  2. Je suis allé au projet Propriétés> Chemin de construction Java, puis j'ai supprimé le JRE. Bibliothèque système qui pointait vers JRE1.5.

  3. Force a mis à jour le projet.

0
Sen

Considérez l'alternative:

<properties>
    <javac.src.version>1.8</javac.src.version>
    <javac.target.version>1.8</javac.target.version>
</properties>

Ce devrait être la même chose que maven.compiler.source/maven.compiler.target mais la solution ci-dessus fonctionne pour moi, sinon le second obtient la spécification parent (j'ai un matrioska de .pom)

0
Stefano