java - example - El proyecto del complemento maven básico no funciona, los descriptores del complemento Mojo no generan
maven-surefire-plugin (5)
Como se mencionó en la respuesta anterior , esto fue un error y ahora está solucionado.
Solo tienes que decirle a maven que debería usar una versión más nueva del maven-plugin-plugin
.
Así es como se ve mi archivo 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>
Estoy siguiendo el tutorial para crear un plugin maven y no puedo ejecutar mvn install sin obtener errores. La información se queja de que no tengo los descriptores de mojo necesarios cuando las anotaciones deberían generarlos para mí. Estoy ejecutando maven 3.0.5 y usando intellij como mi ide. aquí está mi clase principal:
@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());
}
}
}
Y aquí está mi 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>
Nota: Tuve que agregar por separado la dependencia de anotaciones ya que la API principal del complemento no contenía estas clases. cuando ejecuto mvn install en mi proyecto, el resultado es el siguiente:
[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
Después de leer el número de Jira que Gyro publicó , agregué las siguientes líneas a mi pom y todo compiló muy bien.
<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>
Inicialmente, pensé que la respuesta de Gyro solucionó el error. Pero luego, al ejecutar el objetivo, falló.
mvn sample.plugin: hello-maven-plugin: 1.0-SNAPSHOT: sayhi
producido
[ERROR] No se pudo encontrar el objetivo ''sayhi'' en el plugin sample.plugin: hello-maven-plugin: 1.0-SNAPSHOT entre los objetivos disponibles -> [Ayuda 1]
Resulta que
skipErrorNoDescriptorsFound
solo suprimió el error. es decir, no resolvió el problema subyacente. Eliminé esta solución.
Después de eso, la solución fue simple (y la causa fue únicamente mi culpa). Cuando creé GreetingMojo.java, lo coloqué en el siguiente directorio
... / Desarrollo / my-maven-plugin / src / sample / plugin / GreetingMojo.java
Necesitaba estar bajo
... / Desarrollo / my-maven-plugin / src / main / Java / sample / plugin / GreetingMojo.java
Simplemente incrementando la versión del complemento maven a 3.3 o 3.4
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.3</version>
</plugin>
</plugins>
</build>
no solucionará ningún problema (como algunos han declarado).
Debe agregar un mínimo de ejecución del default-descriptor
con la fase correcta. Por lo tanto, la configuración mínima de la información de compilación es la siguiente:
<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>
maven-plugin-plugin
versión maven-plugin-plugin
. (puede ser 3.1, 3.2, 3.3. 3.4 (no evaluó los demás)).
rendirá:
...
[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] ------------------------------------------------------------------------
Otra opción si no quieres tener etiquetas de compilación en tu pom, puedes usar javadocs en tu Mojo. Por ejemplo:
/**
* @goal run123
*/
@Mojo(name = "run123")
public class MyMojo extends AbstractMojo {
}
rendirá:
...
[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] ------------------------------------------------------------------------
Consulte esta guía para obtener más información http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html
Tal vez esto esté relacionado con un problema no resuelto en Maven: http://jira.codehaus.org/browse/MNG-5346
Para mis proyectos de complemento, podría solucionarlo agregando una ejecución explícita del 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>
¡Pero vea los comentarios en el tema JIRA para soluciones más elaboradas!