Ostrzeżenia Maven 3 o build.plugins.plugin.version

313

Od czasu aktualizacji do Maven 3 przy każdej kompilacji otrzymuję następujące komunikaty ostrzegawcze:

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.
Istao
źródło
1
W Maven 3.5.3 jest to teraz błąd. Nie lekceważ ostrzeżeń! Dzięki @gavenkoa za odpowiedź na temat znalezienia wersji wtyczki.
jwm

Odpowiedzi:

400

Dodaj <version>element po <plugin> <artifactId>w pom.xmlpliku. Znajdź następujący tekst:

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

Dodaj do niego tag wersji:

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

Ostrzeżenie powinno zostać rozwiązane.

Odnośnie tego:

„build.plugins.plugin.version” dla org.apache.maven.plugins: brakuje wtyczki kompilatora maven

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

Aby odkryć numer wersji, jednym ze sposobów jest sprawdzenie danych wyjściowych Mavena po zakończeniu działania. W przypadku braku numerów wersji Maven wyświetli domyślną wersję:

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

Weź ten numer wersji (jak 2.3.2wyżej) i dodaj go do POM, jak pokazano.

Todd
źródło
4
@JBT nie rozumiesz dlaczego? Kompilacje maven mają być stabilne, więc wersja, której byś użył, powinna być wyraźnie zdefiniowana. Dlatego o to prosi maven. Jak głosi komunikat: „Zaleca się naprawienie tych problemów, ponieważ zagrażają one stabilności twojej wersji”.
eis
3
Jest to trochę dziwne, ponieważ ten problem występuje tylko wtedy, gdy dodałeś wpis wtyczki do pliku POM projektu. Skuteczny POM ma element wersji, ale nadal musisz dodać element wersji do projektu POM, aby usunąć to ostrzeżenie.
oenpelli
2
Otrzymuję takie same ostrzeżenia jak w pierwotnym pytaniu, ale mój plik pom.xml nie zawiera żadnego odniesienia do wtyczki maven-kompilatora. czego mi brakuje? Dzięki!
Vítor E. Silva Souza
3
Nie działało dla mnie. Tag wersji wtyczki już tam był.
Erran Morad
4
Czy 2.3.2 to najnowsza wersja? Jak rozpoznać, który z nich jest? Czy to nie ma znaczenia?
Pocketkid2
84

Działaj jak:

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

dla wtyczek, które nie mają wersji. Otrzymasz wynik:

Nazwa: Wtyczka Maven WAR
Opis: buduje plik archiwum aplikacji WWW (WAR) z projektu
  wyjście i jego zależności.
Identyfikator grupy: org.apache.maven.plugins
Identyfikator artefaktu: maven-war-plugin
Wersja: 2.2
Prefiks celu: wojna

Użyj wersji pokazanej w danych wyjściowych.

AKTUALIZACJA Jeśli chcesz wybrać spośród listy wersji, użyj http://search.maven.org/ lub http://mvnrepository.com/ Uwaga: twoje ulubione Java IDE musi mieć okno wyszukiwania pakietów Maven . Po prostu sprawdź dokumenty.

SUPER AKTUALIZACJA Używam również:

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

Ostatnio odkryłem, jak uzyskać najnowszą wersję wtyczki (lub biblioteki), więc nie muszę już googlować ani odwiedzać Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS
gavenkoa
źródło
6
+1. Alternatywny i bardziej kompaktowy wariant:mvn help:describe -Dplugin=groupId:artifactId
informatik01
3
Rzeczywiście nie dało to rozwiązania, ale i tak jest to cenna treść: jak rzeczywiście można znaleźć używaną / oczekiwaną wersję. Może warto wspomnieć o umieszczeniu tych wersji wtyczek w nadrzędnym pom za pomocą znacznika pluginManagement-tag: stackoverflow.com/a/10483284/1023341
gkephorus
11

uzyskaj informacje o najnowszej wersji od:

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

kliknij najnowszą wersję (lub tę, której chcesz użyć), a zobaczysz informacje o zależnościach (od 2019-05 to 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>

możesz użyć tagu wersji i komentarza do tagu wtyczki.

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

jeśli chcesz, możesz zmodyfikować swój pom, aby informacje o wersji były w tagu właściwości zgodnie z inną odpowiedzią.

Wolfgang Fahl
źródło
10

Używam nadrzędnego pom dla moich projektów i chciałem określić wersje w jednym miejscu, więc użyłem właściwości do określenia wersji:

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>

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

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

Patrick Koorevaar
źródło
1
Myślę, że może być lepiej, a przynajmniej bardziej naturalnie, użyć pluginManagement dla wersji wtyczek.
Jonathan Rosenne
Z wyjątkiem sytuacji, gdy masz nadrzędną wtyczkęManagement w potomnym POM.
Jonathan Rosenne
2

Świetna odpowiedź tutaj. I chcę dodać „Dlaczego warto dodać element w Maven3”.
W Maven 3.x Uwagi dotyczące kompatybilności

Rozdzielczość metawersji wtyczek
Maven 2.x użył specjalnych znaczników wersji RELEASE i NAJNOWSZY do obsługi automatycznego rozstrzygania wersji wtyczek. Metawersje te zostały również rozpoznane w elemencie deklaracji. Ze względu na powtarzalne kompilacje Maven 3.x nie obsługuje już korzystania z tych metawersji w POM. W rezultacie użytkownicy będą musieli zastąpić wystąpienia tych metawersji konkretną wersją.

I znajduję też w maven-compiler-plugin - użycie

Uwaga: Maven 3.0 wyświetli ostrzeżenia, jeśli nie określisz wersji wtyczki.

ohahohah
źródło