plugin - Java Maven MOJO-obteniendo información del proyecto POM
maven-compiler-plugin pom (3)
Estoy trabajando en un plugin de maven. Parece que me cuesta trabajo averiguar cuál sería una buena manera de obtener información POM del proyecto en el que ejecuta el MOJO.
Por ejemplo, si ejecuto mi mojo en otro proyecto de Maven me gustaría obtener el nombre del proyecto o algunos otros parámetros.
Y una cosa más, hay un MAPA de contexto en la clase AbstractMojo.java, hay un PluginContext de Map privado, ¿podría alguien corregirme si me equivoco pero se supone que esto se debe usar para pasar información entre mojos?
La sintaxis preferida es ahora:
@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;
Deberá agregar una dependencia para maven-project
al pom de su plugin:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>
(Gracias a otros que ya han proporcionado esta información. Esta respuesta los combina en un solo lugar).
Puede inyectar el proyecto maven actual en su mojo con un campo declarado así:
/**
* @parameter default-value="${project}"
* @required
* @readonly
*/
MavenProject project;
El nombre del proyecto está disponible simplemente llamando a project.getName()
. Para usar esta API, debe agregar el artefacto maven-project
como una dependencia:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.6</version>
</dependency>
@Component
private MavenProject project;
También funciona (de forma más sucinta e intuitiva) si se utilizan las nuevas maven-plugin-annotations
, que es la opción predeterminada para los nuevos mojos creados a partir maven-archetype-plugin
de maven-archetype-plugin
.
EDITAR (gracias a @bmargulies): aunque el @Component
Javadoc a partir de 3.2 sugiere usarlo para MavenProject
, aparentemente está en desuso y la sugerencia se MavenProject
3.3; el idioma sugerido por maven-plugin-tools-annotations
(a partir del 3.3) es algo como esto (ambos parecen funcionar):
@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;