Avisos do Maven 3 sobre build.plugins.plugin.version


313

Desde que atualizei para o Maven 3, recebo as seguintes mensagens de aviso em cada build:

Como posso me livrar desses avisos?

[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
No Maven 3.5.3, isso agora é um erro. Não desconsidere os avisos! Obrigado a @gavenkoa pela resposta sobre como encontrar a versão do plugin.
— jwm

Respostas:


400

Adicione um <version>elemento após o <plugin> <artifactId>no seu pom.xmlarquivo. Encontre o seguinte texto:

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

Adicione a tag da versão a ela:

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

O aviso deve ser resolvido.

Em relação a este:

'build.plugins.plugin.version' para org.apache.maven.plugins: o maven-compiler-plugin está ausente

Muitas pessoas mencionaram por que o problema está acontecendo, mas não sugerem uma solução. Tudo o que eu precisava fazer era entrar no meu arquivo POM para o meu projeto e adicionar a <version>tag, como mostrado acima.

Para descobrir o número da versão, uma maneira é procurar na saída do Maven após a execução. Onde faltam números de versão, o Maven exibirá sua versão padrão:

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

Pegue esse número da versão (como 2.3.2acima) e adicione-o ao seu POM, como mostrado.


4
@JBT não entende o porquê? maven builds devem ser estáveis, então qual versão seria usada explicitamente. É por isso que o maven está pedindo. Como a mensagem diz: "É altamente recomendável corrigir esses problemas porque eles ameaçam a estabilidade da sua compilação".
— eis

3
É um pouco estranho, pois você só terá esse problema se tiver adicionado uma entrada para o plug-in no arquivo POM do projeto. O POM efetivo possui o elemento version, mas você ainda precisa adicionar um elemento de versão ao POM do projeto para remover esse aviso.
— Oenpelli

2
Estou recebendo os mesmos avisos da pergunta original, mas meu pom.xml não tem nenhuma referência ao maven-compiler-plugin. o que estou perdendo? Obrigado!
— Vítor E. Silva Souza

3
não funcionou para mim. A tag da versão do plugin já estava lá.
— Erran Morad

4
2.3.2 é a versão mais recente? Como você pode dizer qual é? Ou isso não importa?
— Pocketkid2

84

Executar como:

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

para plug-in que não possui versão. Você obtém saída:

Nome: Maven WAR Plugin
Descrição: cria um arquivo WAR (Web Application Archive) a partir do projeto
  saída e suas dependências.
ID do grupo: org.apache.maven.plugins
ID do artefato: maven-war-plugin
Versão: 2.2
Prefixo da meta: guerra

Use a versão mostrada na saída.

ATUALIZAÇÃO Se você deseja selecionar entre a lista de versões, use http://search.maven.org/ ou http://mvnrepository.com/ Observe que seu Java IDE favorito deve ter a caixa de diálogo de pesquisa de pacotes Maven . Basta verificar os documentos.

SUPER ATUALIZAÇÃO Também uso:

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

Recentemente, descobri como obter a versão mais recente do plug-in (ou biblioteca) para não precisar mais pesquisar no Google ou visitar o Maven Central :

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

6
+1. Uma variante alternativa e mais compacta:mvn help:describe -Dplugin=groupId:artifactId
— informatik01

3
Na verdade, isso não deu uma solução, mas é um conteúdo valioso de qualquer maneira: como, de fato, podemos encontrar a versão usada / esperada. Talvez teria sido algo que vale mencionar colocando estes plugin-versão em um pai-pom usando o pluginManagement-tag: stackoverflow.com/a/10483284/1023341
— gkephorus


11

obtenha as informações da versão mais recente em:

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

clique na versão mais recente (ou na que você gostaria de usar) e verá as informações da dependência (a partir de 2019-05 é 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>

convém usar a tag version e o comentário para a tag plugin.

<!-- 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 quiser, você pode modificar seu pom para ter as informações da versão na tag de propriedades, conforme descrito em outra resposta.


10

Estou usando um pom pai para meus projetos e queria especificar as versões em um único local, então usei propriedades para especificar a versão:

pom pai:

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

pom do projeto:

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

Veja também: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/


1
Eu acho que pode ser melhor, ou pelo menos mais natural, usar pluginManagement para as versões dos plugins.
— Jonathan Rosenne

Exceto quando você tem um pluginManagement substituto no POM filho.
— precisa saber é o seguinte

2

É uma ótima resposta aqui. E eu quero adicionar 'Por que adicionar um elemento no Maven3'.
Em Maven 3.x Notas Compatibilidade

Resolução de metaversão de plug-in
Internamente, o Maven 2.x usou os marcadores de versão especiais RELEASE e LATEST para oferecer suporte à resolução automática de versão de plug-in. Essas metaversões também foram reconhecidas no elemento para uma declaração. Para criar reproduções reproduzíveis, o Maven 3.x não oferece mais suporte ao uso dessas metaversões no POM. Como resultado, os usuários precisarão substituir as ocorrências dessas metaversões por uma versão concreta.

E também encontro no maven-compiler-plugin - uso

Nota: O Maven 3.0 emitirá avisos se você não especificar a versão de um plug-in.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.