Grundlegendes Maven-Plugin-Projekt funktioniert nicht, Mojo-Plugin-Deskriptoren werden nicht generiert

Lesezeit: 8 Minuten

Benutzer-Avatar
Coderatsche

Ich verfolge die Lernprogramm zum Erstellen eines Maven-Plugins und kann mvn install nicht ausführen, ohne Fehler zu erhalten. Die Info beschwert sich, dass ich nicht die erforderlichen Mojo-Deskriptoren habe, wenn die Anmerkungen sie für mich generieren sollten. Ich verwende Maven 3.0.5 und verwende Intellij als meine Idee. Hier ist meine Hauptklasse:

@Mojo(name = "modify-connector")
public class ComplianceMojo extends AbstractMojo {

    @Parameter
    private String artifactId;

    @Parameter
    private String version;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        File jar = new File(getPluginContext().get("project.build.directory") + "https://stackoverflow.com/"
                + getPluginContext().get("project.build.finalname") + "https://stackoverflow.com/" + artifactId + "-" + version);
        if(jar.exists()){
            getLog().info("The file exists! " + jar.getAbsolutePath());
        } else {
            getLog().info("The file does not exist: " + jar.getAbsolutePath());
        }
    }
}

Und hier ist meine pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mysql-jdbc-compliance-maven-plugin</groupId>
    <artifactId>mysql-jdbc-compliance-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>maven-plugin</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Notiz: Ich musste die Anmerkungsabhängigkeit separat hinzufügen, da die Haupt-Plugin-API diese Klassen nicht enthielt. Wenn ich mvn install in meinem Projekt ausführe, sieht die Ausgabe wie folgt aus:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.867s
[INFO] Finished at: Wed Sep 25 17:45:55 EST 2013
[INFO] Final Memory: 8M/244M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:2.9:descriptor (default-descriptor) on project mysql-jdbc-compliance-maven-plugin: Error extracting plugin descriptor: 'No mojo definitions were found for plugin: mysql-jdbc-compliance-maven-plugin:mysql-jdbc-compliance-maven-plugin.' -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Benutzer-Avatar
Gyro Gearless

Möglicherweise hängt dies mit einem ungelösten Problem in Maven zusammen: https://issues.apache.org/jira/browse/MNG-5346

Für meine Plugin-Projekte könnte ich Abhilfe schaffen, indem ich eine explizite Ausführung des maven-plugin-plugins hinzufüge:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <!-- see http://jira.codehaus.org/browse/MNG-5346 -->
                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
                </configuration>

                <executions>
                    <execution>
                        <id>mojo-descriptor</id>
                        <goals>
                            <goal>descriptor</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Aber siehe die Kommentare in der JIRA-Ausgabe für ausführlichere Lösungen!

  • Ich habe das von Ihnen gepostete Problem gelesen und die Problemumgehung auf der Website implementiert, und es hat funktioniert! Danke, dass du mich darauf hingewiesen hast 🙂

    – Coderatsche

    25. September 2013 um 8:30 Uhr


  • Dieses Problem wurde in 3.2.2 behoben: maven.apache.org/docs/3.2.2/release-notes.html

    – Chris Parton

    5. September 2014 um 2:57 Uhr

  • Vielen Dank, dies hat mein Build-Problem auf einer Maschine gelöst, auf der Maven 3.0.5 ausgeführt wird

    – qqilihq

    29. November 2015 um 10:31 Uhr

  • Ein halbes Jahrzehnt später gilt diese Lösung immer noch, wenn maven-plugin-plugin auf maven 3.6.3 abstürzt. Vielen Dank

    – GideonleGrange

    24. September 2020 um 10:22 Uhr

  • Ich kann das Problem in 3.5+ immer noch reproduzieren, aber zum Glück funktioniert dieselbe Lösung immer noch, um es zu beheben! Vielen Dank!

    – Matsu Q.

    19. Oktober 2020 um 16:55 Uhr


Benutzer-Avatar
Coderatsche

nach dem Lesen der Jira Issue, das Gyro gepostet hatich habe die folgenden Zeilen zu meinem Pom hinzugefügt und alles schön kompiliert.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <goalPrefix>mysql-jdbc-compliance</goalPrefix>
            </configuration>
            <executions>
                <execution>
                    <id>default-descriptor</id>
                    <goals>
                        <goal>descriptor</goal>
                    </goals>
                    <phase>process-classes</phase>
                </execution>
                <execution>
                    <id>help-descriptor</id>
                    <goals>
                        <goal>helpmojo</goal>
                    </goals>
                    <phase>process-classes</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

  • Dieser Eintrag wird tatsächlich zu Ihrem Plugin hinzugefügt pom.xml automatisch, wenn Sie das Projekt mit dem Maven-Archetyp generieren: mvn archetype:generate -DgroupId=com.example -DartifactId=my-awesome-maven-plugin -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin

    – Jan Molak

    9. Juli 2015 um 11:39 Uhr


  • Mit mvn 3.3.9 benötigte ich nur groupId, artifactId und v3.5 – die gesamte Konfiguration ist Standard.

    – Adam

    2. November 2017 um 9:53 Uhr

Benutzer-Avatar
Jmini

Wie in der vorherigen Antwort erwähnt, war dies ein Fehler, der jetzt behoben ist.

Sie müssen maven nur mitteilen, dass es eine neuere Version von verwenden soll maven-plugin-plugin.

So sieht meine Pom-Datei aus:

<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">
  <!-- ...other maven config... -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.3</version>
      </plugin>
    </plugins>
  </build>
</project>

  • Version 3.6.1 vom 10.06.2019

    – Jordiburgos

    10. Juni 2019 um 16:17 Uhr

  • @jordiburgos search.maven.org spezifiziert 3.6.0 für die neueste Version vom 16.07.2019 (die am 29.10.2018 aktualisiert wurde)

    – ᴠɪɴᴄᴇɴᴛ

    16. Juli 2019 um 16:03 Uhr


  • search.maven.org/artifact/org.apache.maven.plugins/… für neueste Version

    – rohanagarwal

    1. März um 10:54 Uhr

Benutzer-Avatar
randomUser56789

Das einfache Erhöhen der Maven-Plug-in-Version auf 3.3 oder 3.4 behebt kein Problem (wie einige angegeben haben).

Sie müssen mindestens hinzufügen default-descriptor Ausführung mit der richtigen Phase. Die Mindestkonfiguration der Build-Informationen lautet also wie folgt:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.1</version>
            <executions>
                <execution>
                    <id>default-descriptor</id>
                    <phase>process-classes</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

unabhängig von maven-plugin-plugin Ausführung. (es kann 3.1, 3.2, 3.3. 3.4 sein (habe die anderen nicht getestet)).

ergibt:

...
[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ example-maven-plugin ---
[WARNING] Using platform encoding (UTF-8 actually) to read mojo metadata, i.e. build is platform dependent!
[INFO] Applying mojo extractor for language: java-annotations
[INFO] Mojo extractor for language: java-annotations found 1 mojo descriptors.
[INFO] Applying mojo extractor for language: java
[INFO] Mojo extractor for language: java found 0 mojo descriptors.
[INFO] Applying mojo extractor for language: bsh
[INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Eine weitere Option, wenn Sie keine Build-Tags in Ihrem Pom haben möchten, können Sie javadocs auf Ihrem Mojo verwenden. Zum Beispiel:

/**
 * @goal run123
 */
@Mojo(name = "run123")
public class MyMojo extends AbstractMojo {
}

ergibt:

...
[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ example-maven-plugin ---
[WARNING] Using platform encoding (UTF-8 actually) to read mojo metadata, i.e. build is platform dependent!
[INFO] Applying mojo extractor for language: java-annotations
[INFO] Mojo extractor for language: java-annotations found 0 mojo descriptors.
[INFO] Applying mojo extractor for language: java
[INFO] Mojo extractor for language: java found 1 mojo descriptors.
[INFO] Applying mojo extractor for language: bsh
[INFO] Mojo extractor for language: bsh found 0 mojo descriptors. 
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Weitere Informationen finden Sie in dieser Anleitung
http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html

Tolle Antworten oben – ich möchte sie erweitern, indem ich eine Ressource hinzufüge, um die neueste Version zu finden:
https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-plugin-plugin

2. April 2019 – Ich bin auf den gleichen Fehler oben gestoßen und habe ihn mit 3.6.0 behoben

  • Mit Ziel 11 hat es geklappt

    – duyetpt

    4. November 2021 um 10:40 Uhr

Anfangs dachte ich, Gyros Antwort behebt den Fehler. Aber später beim Ausführen des Ziels scheiterte es.

mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi

produziert

[ERROR] Das Ziel „sayhi“ konnte im Plugin sample.plugin:hello-maven-plugin:1.0-SNAPSHOT nicht unter den verfügbaren Zielen gefunden werden -> [Help 1]

Stellt sich heraus

skipErrorNoDescriptorsFound

nur den Fehler unterdrückt. dh es hat das zugrunde liegende Problem nicht gelöst. Ich habe diesen Fix entfernt.

Danach war die Lösung einfach (und die Ursache rein meine Schuld). Als ich GreetingMojo.java erstellt habe, habe ich es im folgenden Verzeichnis abgelegt

…/Development/my-maven-plugin/src/sample/plugin/GreetingMojo.java

Es musste unter sein

…/Development/my-maven-plugin/src/main/Java/sample/plugin/GreetingMojo.java

  • Mit Ziel 11 hat es geklappt

    – duyetpt

    4. November 2021 um 10:40 Uhr

1186720cookie-checkGrundlegendes Maven-Plugin-Projekt funktioniert nicht, Mojo-Plugin-Deskriptoren werden nicht generiert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy