Advertencias de Maven 3 sobre build.plugins.plugin.version

313

Desde que actualicé a Maven 3 recibo los siguientes mensajes de advertencia en cada compilación:

¿Cómo puedo deshacerme de estas advertencias?

[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
fuente
1
En Maven 3.5.3, esto ahora es un error. ¡No ignores las advertencias! Gracias a @gavenkoa por la respuesta sobre cómo encontrar la versión del complemento.
jwm

Respuestas:

400

Agregue un <version>elemento después de <plugin> <artifactId>en su pom.xmlarchivo. Encuentra el siguiente texto:

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

Agregue la etiqueta de versión:

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

La advertencia debe resolverse.

Con respecto a este:

'build.plugins.plugin.version' para org.apache.maven.plugins: falta el complemento-compilador-maven

Muchas personas han mencionado por qué está ocurriendo el problema, pero no sugieren una solución. Todo lo que necesitaba hacer era ir a mi archivo POM para mi proyecto y agregar la <version>etiqueta como se muestra arriba.

Para descubrir el número de versión, una forma es mirar la salida de Maven después de que termine de ejecutarse. Cuando faltan números de versión, Maven mostrará su versión predeterminada:

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

Tome ese número de versión (como en el 2.3.2anterior) y agréguelo a su POM, como se muestra.

Todd
fuente
44
@JBT no entiendo por qué? Las compilaciones de Maven están destinadas a ser estables, por lo que la versión que se usaría debe definirse explícitamente. Es por eso que Maven lo está pidiendo. Como dice el mensaje: "Se recomienda encarecidamente solucionar estos problemas porque amenazan la estabilidad de su compilación".
Eis
3
Sin embargo, es un poco extraño, ya que solo obtiene este problema si ha agregado una entrada para el complemento al archivo POM del proyecto. El POM efectivo tiene el elemento de versión pero aún necesita agregar un elemento de versión al POM del proyecto para eliminar esta advertencia.
Oenpelli
2
Recibo las mismas advertencias que la pregunta original, pero mi pom.xml no tiene ninguna referencia a maven-compiler-plugin. ¿Qué me estoy perdiendo? ¡Gracias!
Vítor E. Silva Souza
3
No funciono para mi. La etiqueta de versión del complemento ya estaba allí.
Erran Morad
44
¿Es 2.3.2 la última versión? ¿Cómo puedes saber cuál es? ¿O no importa?
Pocketkid2
84

Corre como:

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

para complementos que no tienen versión. Obtienes salida:

Nombre: Complemento WAR de Maven
Descripción: crea un archivo de archivo de aplicación web (WAR) a partir del proyecto
  salida y sus dependencias.
Id. De grupo: org.apache.maven.plugins
Id. De artefacto: plugin de guerra de maven
Versión: 2.2
Prefijo de objetivo: guerra

Use la versión que se muestra en la salida.

ACTUALIZACIÓN Si desea seleccionar entre la lista de versiones, use http://search.maven.org/ o http://mvnrepository.com/ Tenga en cuenta que su IDE de Java favorito debe tener el diálogo de búsqueda de paquetes de Maven . Solo revisa los documentos.

SUPER ACTUALIZACIÓN También uso:

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

Recientemente descubrí cómo obtener la última versión para el complemento (o biblioteca) para que ya no necesite buscar en Google o visitar Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS
gavenkoa
fuente
66
+1. Una variante alternativa y más compacta:mvn help:describe -Dplugin=groupId:artifactId
informatik01
3
De hecho, esto no dio una solución, pero de todos modos es un contenido valioso: ¿cómo se puede encontrar la versión utilizada / esperada? Tal vez hubiera valido la pena mencionar colocar esta versión del complemento en un padre-pom utilizando la etiqueta pluginManagement-tag: stackoverflow.com/a/10483284/1023341
gkephorus
11

Obtenga la información de la última versión de:

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

haga clic en la última versión (o la que le gustaría usar) y verá la información de dependencia (a partir de 2019-05 es 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>

es posible que desee utilizar la etiqueta de versión y el comentario para su etiqueta de complemento.

<!-- 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 lo desea, puede modificar su pom para tener la información de la versión en la etiqueta de propiedades como se describe en otra respuesta.

Wolfgang Fahl
fuente
10

Estoy usando un pom padre para mis proyectos y quería especificar las versiones en un solo lugar, así que utilicé las propiedades para especificar la versión:

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

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

Ver también: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/

Patrick Koorevaar
fuente
1
Creo que podría ser mejor, o al menos más natural, usar pluginManagement para las versiones de los complementos.
Jonathan Rosenne
Excepto cuando tiene un plugin de gestión superior en el POM secundario.
Jonathan Rosenne
2

Es una gran respuesta aquí. Y quiero agregar 'Por qué agregar un elemento en Maven3'.
En Maven 3.x Notas de compatibilidad

Resolución de la metaversión del complemento
Internamente, Maven 2.x usó los marcadores especiales de versión RELEASE y LATEST para admitir la resolución automática de la versión del complemento. Estas metaversiones también se reconocieron en el elemento para una declaración. En aras de las compilaciones reproducibles, Maven 3.x ya no admite el uso de estas metaversiones en el POM. Como resultado, los usuarios deberán reemplazar las ocurrencias de estas metaversiones con una versión concreta.

Y también encuentro en maven-compiler-plugin - uso

Nota: Maven 3.0 emitirá advertencias si no especifica la versión de un complemento.

ohahohah
fuente