2012-05-15 14 views
21

Estoy trabajando en un plugin maven. Parece que me cuesta mucho descubrir cuál sería una buena forma de obtener información POM del proyecto en el que ejecutas el MOJO.Java Maven MOJO - obteniendo información del proyecto POM

Por ejemplo, si ejecuto mi mojo en otro proyecto de maven me gustaría obtener el nombre del proyecto u otros parámetros.

Y una cosa más, hay un mapa de contexto en la clase AbstractMojo.java hay un pluginContext de mapa privado, ¿alguien podría corregirme si estoy equivocado pero se supone que se debe usar para pasar información entre mojos?

+1

Debe especificar claramente qué desea y dónde necesita acceder a esta información. La información del proyecto está disponible en el pom de forma predeterminada –

+1

La primera pregunta que siempre hago en relación con la creación de complementos es: ¿Qué te gustaría lograr? ¿Estás seguro de que necesitas escribir un plugin? Además, eche un vistazo a otros complementos, por ejemplo, maven-assembly-plugin, maven-javadoc-plugin, etc. para ver cómo funcionan, etc. – khmarbaise

+0

gracias por sus consejos – Xeperis

Respuesta

33

Usted puede inyectar el proyecto actual experto en su mojo con un campo declarada como esto:

/** 
* @parameter default-value="${project}" 
* @required 
* @readonly 
*/ 
MavenProject project; 

El nombre de los proyectos está entonces disponible, simplemente llamando a project.getName(). Para utilizar esta API, es necesario agregar el artefacto maven-project como una dependencia:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 
+1

Funciona para mí en maven 3.0.3; agrega la dependencia y luego ¡inyecta el proyecto! –

+0

Creo que encontré esta respuesta en otra parte de la red, pero me confundió el hecho de que se inyectó al agregar una dependencia desconocida (para mi proyecto). Esto lo aclara perfectamente, gracias. –

18
@Component 
private MavenProject project; 

también funciona (más sucintamente y de manera intuitiva) si se utiliza el nuevo maven-plugin-annotations, que es el valor por defecto para los nuevos mojos creados a partir de maven-archetype-plugin.

EDITAR (gracias a @bmargulies): aunque el Javadoc @Component como de 3,2 sugiere que se utilice para MavenProject, al parecer, que es obsoleto y la sugerencia de que se ha caído de 3,3; la idiom suggested por maven-plugin-tools-annotations (a partir de 3.3) es algo como esto (ambos parecen funcionar):

@Parameter(defaultValue="${project}", readonly=true, required=true) 
private MavenProject project; 
+1

Esto está en desuso. – bmargulies

+0

OK; ¿Qué se recomienda en su lugar (para los complementos que usan la nueva API)? –

+2

el equivalente de la anotación de la respuesta de @ Jörn Horstmann. – bmargulies

7

La sintaxis preferida es ahora:

@Parameter(defaultValue = "${project}", required = true, readonly = true) 
MavenProject project; 

Usted tendrá que agregar una dependencia de maven-project a pom de su plugin:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 

(.. Gracias a otras personas que han suministrado esta información ya esta pregunta los combina en un solo lugar)

+2

Quizás para la anotación @Parameter le gustaría agregar el artefacto maven-plugin-annotations. –

Cuestiones relacionadas