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