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.
Istao
fonte
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.

Todd
fonte
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
gavenkoa
fonte
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.

Wolfgang Fahl
fonte
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/

Patrick Koorevaar
fonte
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.

ohahohah
fonte