2010-11-08 11 views
252

Odkąd zaktualizowane do Maven 3 dostaję następujących komunikatów ostrzegawczych przy każdej kompilacji:Maven 3 ostrzeżenia o build.plugins.plugin.version

Jak mogę pozbyć się tych ostrzeżeń?

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

Odpowiedz

307

dodać element <version> po <plugin><artifactId> w pliku pom.xml. Znajdź następujący tekst:

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

Dodaj znacznik wersji do niego:

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

Ostrzeżenie powinno być rozwiązane.

dotyczące tego:

'build.plugins.plugin.version' dla org.apache.maven.plugins: Maven-compiler-plugin brakuje

Wiele osób wspomniało dlaczego problem się dzieje, ale nie sugeruje poprawki. Wszystko, co musiałem zrobić, to przejść do mojego pliku POM dla mojego projektu i dodać znacznik <version>, jak pokazano powyżej.

Aby odkryć numer wersji, jednym ze sposobów jest przeglądanie wyników Mavena po jego uruchomieniu. Gdzie brakuje numerów wersji, Maven pokaże swoją domyślną wersję:

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

wziąć to numer wersji (jak w powyższym 2.3.2) i dodać go do POM, jak pokazano na rysunku.

+4

@JBT nie rozumiem, dlaczego? Konstrukcje maven mają być stabilne, więc jaka wersja będzie używana powinna być wyraźnie zdefiniowana. Dlatego maven pyta o to. Podobnie jak w przypadku komunikatu: "Zaleca się naprawienie tych problemów, ponieważ zagrażają stabilności kompilacji." – eis

+0

@Masz sens. Dzięki. – JBT

+3

To jest trochę dziwne, ponieważ problem występuje tylko wtedy, gdy dodano wpis wtyczki do pliku POM projektu.Efektywny POM ma element version, ale nadal musisz dodać element version do projektu POM, aby usunąć to ostrzeżenie. – oenpelli

63

Run jak:

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

dla plug-in, które nie mają wersji. Otrzymasz wyjście:

 
Name: Maven WAR Plugin 
Description: Builds a Web Application Archive (WAR) file from the project 
    output and its dependencies. 
Group Id: org.apache.maven.plugins 
Artifact Id: maven-war-plugin 
Version: 2.2 
Goal Prefix: war 

Użyj wersji pokazanej na wyjściu.

UPDATE Jeśli chcesz wybrać spośród listy wersjach, należy użyć http://search.maven.org/ lub http://mvnrepository.com/ Pamiętaj, że Twój ulubiony IDE dla Javy musi Maven wyszukiwania pakiet dialogowe mieć. Po prostu sprawdź dokumenty.

SUPER UPDATE Używam również:

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

Ostatnio odkryłem jak dostać najnowszą wersję dla plug-in (lub biblioteki), więc nie potrzebuje do googlowania lub odwiedzając Maven Central:

+6

+1. Alternatywny i bardziej kompaktowy wariant: 'mvn help: describe -Dplugin = groupId: artifactId' – informatik01

+2

W rzeczywistości nie dało to rozwiązania, ale i tak jest wartościową treścią: jak naprawdę można znaleźć wersję/oczekiwaną wersję. Może warto byłoby o czymś wspomnieć umieszczając tę ​​wersję wtyczki w parent-pom przy użyciu pluginManagement-tag: http://stackoverflow.com/a/10483284/1023341 – gkephorus

8

Używam programu macierzystego pom dla moich projektów i chciałem określić wersje w jednym miejscu, więc użyłem właściwości określić wersję:

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

pom projekt:

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

Patrz także: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/

+0

Myślę, że może być lepiej, lub przynajmniej bardziej naturalne, aby użyć pluginManagement dla wersji wtyczek. –

+0

Z wyjątkiem sytuacji, gdy masz nadpisujące zarządzanie wtyczkami w podrzędnym POM. –

2

uzyskać najnowsze informacje o wersji z:

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

kliknięcie na najnowszej wersji (lub jednej chcesz używać) i zobaczysz informacje o zależność:

<!-- 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.6.1</version> 
</dependency> 

może chcesz użyć tagu wersji i komentarz do twojego znacznik wtyczki.

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

Jeśli chcesz, możesz zmodyfikować swój pom, aby informacje o wersji w tagu właściwości zostały opisane w innej odpowiedzi.

1

To wspaniała odpowiedź tutaj. I chcę dodać "Dlaczego dodawać element w Maven3".
W Maven 3.x Compatibility Notes

Plugin Metaversion Rozdzielczość
Wewnętrznie Maven 2.x stosować specjalne markery wersji wydania i najnowsze wspierać automatyczną rozdzielczość Wersja wtyczki. Te metaversions zostały również uznane w elemencie dla deklaracji. Ze względu na powtarzalne kompilacje, Maven 3.x nie obsługuje już wykorzystania tych metawersji w POM. W rezultacie użytkownicy będą musieli zastąpić wystąpienia tych metaprojektów konkretną wersją.

I ja również znaleźć w maven-compiler-plugin - usage

Uwaga: Maven 3.0 będzie wydawać ostrzeżenia, jeśli nie określić wersję wtyczki.