Maven 3 avvisi su build.plugins.plugin.version


313

Da quando ho aggiornato a Maven 3 ricevo i seguenti messaggi di avviso ad ogni build:

Come posso eliminare questi avvisi?

[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.

1
In Maven 3.5.3, questo è ora un errore. Non trascurare gli avvisi! Grazie a @gavenkoa per la risposta su come trovare la versione del plugin.
jwm

Risposte:


400

Aggiungi un <version>elemento dopo il <plugin> <artifactId>nel tuo pom.xmlfile. Trova il seguente testo:

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

Aggiungi il tag della versione ad esso:

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

L'avviso dovrebbe essere risolto.

A riguardo:

'build.plugins.plugin.version' per org.apache.maven.plugins: manca maven-compiler-plugin

Molte persone hanno menzionato il motivo per cui si sta verificando il problema, ma non riescono a suggerire una soluzione. Tutto quello che dovevo fare era andare nel mio file POM per il mio progetto e aggiungere il <version>tag come mostrato sopra.

Per scoprire il numero di versione, un modo è guardare l'output di Maven al termine della sua esecuzione. Dove mancano i numeri di versione, Maven mostrerà la sua versione predefinita:

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

Prendi quel numero di versione (come 2.3.2sopra) e aggiungilo al tuo POM, come mostrato.


4
@JBT non capisci perché? le build di maven sono pensate per essere stabili, quindi quale versione si dovrebbe usare dovrebbe essere definita in modo esplicito. Ecco perché lo chiede Maven. Come dice il messaggio, "Si consiglia vivamente di risolvere questi problemi perché minacciano la stabilità della build".
Eis,

3
È un po 'strano, poiché si ottiene questo problema solo se è stata aggiunta una voce per il plug-in al file POM del progetto. Il POM effettivo ha l'elemento versione ma è ancora necessario aggiungere un elemento versione al POM del progetto per rimuovere questo avviso.
Oenpelli,

2
Ricevo gli stessi avvertimenti della domanda originale, ma il mio pom.xml non ha alcun riferimento a maven-compiler-plugin. Cosa mi sto perdendo? Grazie!
Vítor E. Silva Souza,

3
Non ha funzionato per me. Il tag della versione del plugin era già lì.
Erran Morad,

4
2.3.2 è l'ultima versione? Come puoi sapere quale è? O non importa?
Pocketkid2,

84

Esegui come:

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

per plug-in che non hanno versione. Ottieni output:

Nome: Maven WAR Plugin
Descrizione: crea un file WAR (Web Application Archive) dal progetto
  output e sue dipendenze.
ID gruppo: org.apache.maven.plugins
ID artefatto: maven-war-plugin
Versione: 2.2
Prefisso obiettivo: guerra

Usa la versione mostrata nell'output.

AGGIORNAMENTO Se si desidera selezionare un elenco di versioni, utilizzare http://search.maven.org/ o http://mvnrepository.com/ Si noti che il proprio IDE Java preferito deve avere la finestra di dialogo di ricerca del pacchetto Maven . Controlla i documenti.

SUPER UPDATE Uso anche:

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

Recentemente ho scoperto come ottenere l' ultima versione per il plug-in (o la libreria), quindi non è più necessario cercare su Google o visitare Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS

6
+1. Una variante alternativa e più compatta:mvn help:describe -Dplugin=groupId:artifactId
informatik01

3
In effetti questo non ha fornito una soluzione ma ha comunque un contenuto prezioso: come si può effettivamente trovare la versione utilizzata / prevista. Forse sarebbe stato degno qualcosa parlare ponendo questi plug-in versione un genitore-pon con il pluginManagement-tag: stackoverflow.com/a/10483284/1023341
gkephorus


11

ottenere le informazioni sulla versione più recente da:

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

fai clic sull'ultima versione (o quella che desideri utilizzare) e vedrai le informazioni sulla dipendenza (a partire da 2019-05 è la 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>

potresti voler utilizzare il tag versione e il commento per il tag 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>

se ti piace puoi modificare il tuo pom per avere le informazioni sulla versione nel tag delle proprietà come indicato in un'altra risposta.


10

Sto usando un pom padre per i miei progetti e volevo specificare le versioni in un unico posto, quindi ho usato le proprietà per specificare la versione:

genitore:

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

progetto 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>

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


1
Penso che potrebbe essere meglio, o almeno più naturale, usare pluginManagement per le versioni dei plugin.
Jonathan Rosenne,

Tranne quando si dispone di un plugin prevalente Gestione nella POM figlio.
Jonathan Rosenne,

2

È un'ottima risposta qui. E voglio aggiungere "Perché aggiungere un elemento in Maven3".
In Maven 3.x Note di compatibilità

Risoluzione di Metaversion del plugin
Internamente, Maven 2.x ha usato i marcatori di versione speciale RELEASE e LATEST per supportare la risoluzione automatica della versione del plugin. Queste metaversioni sono state anche riconosciute nell'elemento per una dichiarazione. Per motivi di build riproducibili, Maven 3.x non supporta più l'utilizzo di queste metaversioni nel POM. Di conseguenza, gli utenti dovranno sostituire le occorrenze di queste metaversioni con una versione concreta.

E trovo anche in maven-compilatore-plugin - utilizzo

Nota: Maven 3.0 emetterà avvisi se non si specifica la versione di un plug-in.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.