Maven 3-Warnungen zu build.plugins.plugin.version

313

Seit ich auf Maven 3 aktualisiert habe, erhalte ich bei jedem Build die folgenden Warnmeldungen:

Wie kann ich diese Warnungen entfernen?

[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
quelle
1
In Maven 3.5.3 ist dies jetzt ein Fehler. Warnungen nicht ignorieren! Vielen Dank an @gavenkoa für die Antwort, wie man die Plugin-Version findet.
JWM

Antworten:

400

Fügen Sie <version>nach dem <plugin> <artifactId>in Ihrer pom.xmlDatei ein Element hinzu . Suchen Sie den folgenden Text:

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

Fügen Sie das Versions-Tag hinzu:

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

Die Warnung sollte behoben sein.

Was das betrifft:

'build.plugins.plugin.version' für org.apache.maven.plugins: maven-compiler-plugin fehlt

Viele Leute haben erwähnt, warum das Problem auftritt, schlagen aber keine Lösung vor. Alles, was ich tun musste, war, in meine POM-Datei für mein Projekt zu gehen und das <version>Tag wie oben gezeigt hinzuzufügen .

Um die Versionsnummer zu ermitteln, können Sie nach Abschluss der Ausführung in Mavens Ausgabe nachsehen. Wenn Sie Versionsnummern vermissen, zeigt Maven seine Standardversion an:

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

Nehmen Sie diese Versionsnummer (wie 2.3.2oben) und fügen Sie sie wie gezeigt zu Ihrem POM hinzu.

Todd
quelle
4
@JBT nicht verstehen warum? Maven-Builds sollen stabil sein, daher sollte explizit definiert werden, welche Version verwendet werden soll. Deshalb bittet Maven darum. In der Meldung heißt es: "Es wird dringend empfohlen, diese Probleme zu beheben, da sie die Stabilität Ihres Builds gefährden."
Eis
3
Es ist allerdings etwas seltsam, da dieses Problem nur auftritt, wenn Sie der POM-Projektdatei einen Eintrag für das Plugin hinzugefügt haben. Das effektive POM verfügt über das Versionselement, Sie müssen dem Projekt-POM jedoch noch ein Versionselement hinzufügen, um diese Warnung zu entfernen.
Oenpelli
2
Ich erhalte die gleichen Warnungen wie die ursprüngliche Frage, aber meine pom.xml enthält keinen Verweis auf das Maven-Compiler-Plugin. Was vermisse ich? Vielen Dank!
Vítor E. Silva Souza
3
Hat bei mir nicht funktioniert. Das Plugin-Versions-Tag war bereits vorhanden.
Erran Morad
4
Ist 2.3.2 die neueste Version? Wie können Sie erkennen, welches ist? Oder spielt es keine Rolle?
Pocketkid2
84

Laufen Sie wie:

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

für Plug-Ins, die keine Version haben. Sie erhalten Ausgabe:

Name: Maven WAR Plugin
Beschreibung: Erstellt eine WAR-Datei (Web Application Archive) aus dem Projekt
  Ausgabe und ihre Abhängigkeiten.
Gruppen-ID: org.apache.maven.plugins
Artefakt-ID: Maven-War-Plugin
Version: 2.2
Zielpräfix: Krieg

Verwenden Sie die in der Ausgabe gezeigte Version.

UPDATE Wenn Sie aus einer Liste von Versionen auswählen möchten, verwenden Sie http://search.maven.org/ oder http://mvnrepository.com/. Beachten Sie, dass Ihre bevorzugte Java-IDE über ein Dialogfeld zur Suche nach Maven-Paketen verfügen muss . Überprüfen Sie einfach die Dokumente.

SUPER UPDATE Ich benutze auch:

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

Kürzlich habe ich herausgefunden, wie man die neueste Version für das Plug-In (oder die Bibliothek) erhält, sodass ich nicht mehr googeln oder Maven Central besuchen muss :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS
Gavenkoa
quelle
6
+1. Eine alternative und kompaktere Variante:mvn help:describe -Dplugin=groupId:artifactId
informatik01
3
In der Tat gab dies keine Lösung, aber es ist trotzdem wertvoller Inhalt: Wie kann man tatsächlich die verwendete / erwartete Version finden? Vielleicht wäre es etwas wert gewesen zu erwähnen, dass diese Plugin-Version mit dem pluginManagement-Tag in einem übergeordneten POM platziert wurde: stackoverflow.com/a/10483284/1023341
gkephorus
11

Die neuesten Versionsinformationen erhalten Sie von:

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

Klicken Sie auf die neueste Version (oder die Version, die Sie verwenden möchten) und Sie sehen die Abhängigkeitsinformationen (Stand 2019-05 ist 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>

Möglicherweise möchten Sie das Versions-Tag und den Kommentar für Ihr Plugin-Tag verwenden.

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

Wenn Sie möchten, können Sie Ihren POM so ändern, dass die Versionsinformationen im Eigenschaften-Tag angezeigt werden, wie in einer anderen Antwort beschrieben.

Wolfgang Fahl
quelle
10

Ich verwende einen übergeordneten POM für meine Projekte und wollte die Versionen an einer Stelle angeben. Daher habe ich Eigenschaften verwendet, um die Version anzugeben:

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

Siehe auch: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/

Patrick Koorevaar
quelle
1
Ich denke, es könnte besser oder zumindest natürlicher sein, pluginManagement für die Versionen der Plugins zu verwenden.
Jonathan Rosenne
Außer wenn Sie ein übergeordnetes Plugin-Management im untergeordneten POM haben.
Jonathan Rosenne
2

Es ist eine großartige Antwort hier. Und ich möchte hinzufügen, warum ein Element in Maven3 hinzugefügt wird.
In Maven 3.x Kompatibilitätshinweise

Auflösung der Plugin-Metaversion
Intern verwendete Maven 2.x die speziellen Versionsmarkierungen RELEASE und LATEST, um die automatische Auflösung der Plugin-Version zu unterstützen. Diese Metaversionen wurden auch im Element für eine Deklaration erkannt. Aus Gründen reproduzierbarer Builds unterstützt Maven 3.x die Verwendung dieser Metaversionen im POM nicht mehr. Infolgedessen müssen Benutzer das Auftreten dieser Metaversionen durch eine konkrete Version ersetzen.

Und ich finde auch im Maven-Compiler-Plugin - Verwendung

Hinweis: Maven 3.0 gibt Warnungen aus, wenn Sie die Version eines Plugins nicht angeben.

ohahohah
quelle