Maven 3 avertissements sur build.plugins.plugin.version

313

Depuis que j'ai mis à jour vers Maven 3, je reçois les messages d'avertissement suivants à chaque version:

Comment puis-je me débarrasser de ces avertissements?

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for proj:id:jar:3.1
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 195, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 204, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 227, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 215, column 15
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:jdepend-maven-plugin is missing. @ line 271, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
Istao
la source
1
Dans Maven 3.5.3, c'est maintenant une erreur. Ne négligez pas les avertissements! Merci à @gavenkoa pour la réponse sur la façon de trouver la version du plugin.
jwm

Réponses:

400

Ajoutez un <version>élément après le <plugin> <artifactId>dans votre pom.xmlfichier. Trouvez le texte suivant:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>

Ajoutez-y la balise de version:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>

L'avertissement doit être résolu.

À ce sujet:

'build.plugins.plugin.version' pour org.apache.maven.plugins: maven-compiler-plugin est manquant

De nombreuses personnes ont expliqué pourquoi le problème se produit, mais ne proposent pas de solution. Tout ce que je devais faire était d'entrer dans mon fichier POM pour mon projet et d'ajouter la <version>balise comme indiqué ci-dessus.

Pour découvrir le numéro de version, une façon consiste à regarder dans la sortie de Maven une fois qu'il a fini de fonctionner. Là où il vous manque des numéros de version, Maven affichera sa version par défaut:

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ entities ---

Prenez ce numéro de version (comme 2.3.2ci - dessus) et ajoutez-le à votre POM, comme indiqué.

Todd
la source
4
@JBT ne comprends pas pourquoi? Les builds maven sont censés être stables, donc la version que l'on utiliserait devrait être explicitement définie. C'est pourquoi maven le demande. Comme le message le dit, "il est fortement recommandé de résoudre ces problèmes car ils menacent la stabilité de votre build."
eis
3
C'est un peu étrange, car vous n'obtenez ce problème que si vous avez ajouté une entrée pour le plugin au fichier POM du projet. Le POM effectif possède l'élément de version, mais vous devez toujours ajouter un élément de version au projet POM pour supprimer cet avertissement.
oenpelli
2
Je reçois les mêmes avertissements que la question d'origine, mais mon pom.xml n'a aucune référence à maven-compiler-plugin. Qu'est-ce que je rate? Merci!
Vítor E. Silva Souza
3
N'a pas travaillé pour moi. La balise de version du plugin était déjà là.
Erran Morad
4
2.3.2 est-il la dernière version? Comment pouvez-vous savoir lequel? Ou n'est-ce pas important?
Pocketkid2
84

Courez comme:

  $ mvn help: describe -DartifactId = maven-war-plugin -DgroupId = org.apache.maven.plugins

pour les plug-ins qui n'ont pas de version. Vous obtenez une sortie:

Nom: Plugin Maven WAR
Description: crée un fichier WAR (Web Application Archive) à partir du projet
  sortie et ses dépendances.
ID de groupe: org.apache.maven.plugins
ID de l'artefact: plugin maven-war
Version: 2.2
Préfixe d'objectif: guerre

Utilisez la version indiquée dans la sortie.

MISE À JOUR Si vous souhaitez sélectionner parmi la liste des versions, utilisez http://search.maven.org/ ou http://mvnrepository.com/ Notez que votre IDE Java préféré doit avoir la boîte de dialogue de recherche de package Maven . Vérifiez simplement les documents.

SUPER UPDATE J'utilise également:

$ mvn dependency:tree
$ mvn dependency:list
$ mvn dependency:resolve
$ mvn dependency:resolve-plugins  # <-- THIS

Récemment, je découvre comment obtenir la dernière version du plug-in (ou de la bibliothèque) afin de ne plus avoir besoin de googler ou de visiter Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS
gavenkoa
la source
6
+1. Une variante alternative et plus compacte:mvn help:describe -Dplugin=groupId:artifactId
informatik01
3
En effet cela n'a pas donné de solution mais c'est quand même un contenu précieux: comment en effet peut-on trouver la version utilisée / attendue. Peut-être que cela aurait valu la peine de mentionner le fait de placer cette version du plugin dans un parent-pom en utilisant le pluginManagement-tag: stackoverflow.com/a/10483284/1023341
gkephorus
11

obtenir les dernières informations de version à partir de:

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin

cliquez sur la dernière version (ou celle que vous souhaitez utiliser) et vous verrez les informations de dépendance (à partir de 2019-05, c'est 3.8.1):

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
</dependency>

vous voudrez peut-être utiliser la balise de version et le commentaire pour votre balise de plug-in.

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source />
        <target />
    </configuration>
</plugin>

si vous le souhaitez, vous pouvez modifier votre pom pour avoir les informations de version dans la balise de propriétés comme indiqué dans une autre réponse.

Wolfgang Fahl
la source
10

J'utilise un pom parent pour mes projets et je voulais spécifier les versions en un seul endroit, j'ai donc utilisé des propriétés pour spécifier la version:

pom parent:

<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">
    ....
    <properties>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>
    ....
</project>

projet pom:

<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">
    ....
    <build>
        <finalName>helloworld</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin-version}</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Voir aussi: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/

Patrick Koorevaar
la source
1
Je pense qu'il serait préférable, ou du moins plus naturel, d'utiliser pluginManagement pour les versions des plugins.
Jonathan Rosenne
Sauf lorsque vous avez une gestion de plugin prioritaire dans le POM enfant.
Jonathan Rosenne
2

C'est une excellente réponse ici. Et je veux ajouter «Pourquoi ajouter un élément dans Maven3».
Dans les notes de compatibilité de Maven 3.x

Résolution de la métaversion du plug-in En
interne, Maven 2.x a utilisé les marqueurs de version spéciaux RELEASE et LATEST pour prendre en charge la résolution automatique de la version du plug-in. Ces métaversions ont également été reconnues dans l'élément d'une déclaration. Par souci de builds reproductibles, Maven 3.x ne prend plus en charge l'utilisation de ces métaversions dans le POM. Par conséquent, les utilisateurs devront remplacer les occurrences de ces métaversions par une version concrète.

Et je trouve également dans maven-compiler-plugin - utilisation

Remarque: Maven 3.0 émettra des avertissements si vous ne spécifiez pas la version d'un plugin.

ohahohah
la source