web-dev-qa-db-fra.com

Le projet de plug-in maven de base ne fonctionne pas, les descripteurs de plug-in Mojo ne génèrent pas

Je suis le tutorial pour créer un plugin maven et je ne peux pas exécuter mvn install sans obtenir des erreurs. L'information se plaint que je n'ai pas les descripteurs mojo requis lorsque les annotations devraient les générer pour moi. Je maven 3.0.5 et utilise intellij comme mon idée. voici ma classe principale:

@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") + "/"
                + getPluginContext().get("project.build.finalname") + "/" + artifactId + "-" + version);
        if(jar.exists()){
            getLog().info("The file exists! " + jar.getAbsolutePath());
        } else {
            getLog().info("The file does not exist: " + jar.getAbsolutePath());
        }
    }
}

Et voici mon 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>

Remarque: J'ai dû ajouter séparément la dépendance des annotations car le plugin principal api ne contenait pas ces classes. quand je lance mvn install sur mon projet, le résultat est le suivant:

[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
63
coderatchet

après avoir lu le numéro de Jira que Gyro a posté , j’ai ajouté les lignes suivantes à mon pom et tout a été bien compilé.

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

Peut-être que ceci est lié à un problème non résolu dans Maven: https://issues.Apache.org/jira/browse/MNG-5346

Pour mes projets de plugins, je pourrais contourner le problème en ajoutant une exécution explicite du plugin maven-plugin:

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

Mais voyez les commentaires dans le numéro de JIRA pour des solutions plus élaborées!

54
Gyro Gearless

Comme mentionné dans le réponse précédente , c'était un bogue et il est maintenant corrigé.

Vous devez juste dire à maven qu’il devrait utiliser une version plus récente du maven-plugin-plugin.

Voici à quoi ressemble mon fichier 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">
  <!-- ...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>
29
Jmini

Incrémenter simplement la version du plugin Maven vers la version 3.3 ou 3.4

  <build>
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.3</version>
      </plugin>
    </plugins>
  </build>

ne résoudra aucun problème (comme certains l'ont indiqué).

Vous devez ajouter un minimum de default-descriptor exécution avec la phase correcte. Donc, la configuration minimale des informations de construction est la suivante:

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

indépendamment de maven-plugin-plugin version. (cela peut être 3.1, 3.2, 3.3. 3.4 (n'a pas testé les autres)).

donnera:

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

Une autre option si vous ne voulez pas avoir de balises de construction dans votre pom, vous pouvez utiliser des javadocs sur votre Mojo. Par exemple:

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

donnera:

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

Veuillez vous référer à ce guide pour plus d'informations http://maven.Apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html

12
randomUser56789

Excellentes réponses ci-dessus - j'aimerais les augmenter en ajoutant une ressource pour trouver la dernière version: https://mvnrepository.com/artifact/org.Apache.maven.plugins/maven-plugin-plugin

2 avril 2019 - J'ai rencontré la même erreur ci-dessus et l'ai résolue en utilisant 3.6.0

2
solbs

Au début, je pensais que la réponse de Gyro corrigeait l'erreur. Mais plus tard, lors de l'exécution du but, il a échoué.

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

produit

[ERREUR] Impossible de trouver l'objectif 'sayhi' dans le plugin sample.plugin: hello-maven-plugin: 1.0-SNAPSHOT parmi les objectifs disponibles -> [Aide 1]

Il s'avère que

skipErrorNoDescriptorsFound

seulement supprimé l'erreur. Cela n'a pas résolu le problème sous-jacent. J'ai supprimé ce correctif.

Après cela, la solution était simple (et la cause était purement de ma faute). Quand j'ai créé GreetingMojo.Java je l'ai placé dans le répertoire suivant

.../Développement/my-maven-plugin/src/sample/plugin/GreetingMojo.Java

Il devait être sous

.../Développement/my-maven-plugin/src/main/Java/sample/plugin/GreetingMojo.Java

0
Shane Gannon