2011-03-06 15 views
20

tengo un plugin de Maven que se debe ejecutar en la fase de compilación, por lo que en el proyecto que consume mi complemento, tengo que hacer algo como esto:¿Cómo conectar un plugin maven a una fase por defecto?

<executions> 
<execution> 
    <phase>compile</phase> 
    <goals> 
    <goal>my-goal</goal> 
    </goals> 
</execution> 
</executions> 

Lo que necesito es a por defecto adjunte my-goal a la fase de compilación si el usuario ya ha incluido mi complemento (idealmente la parte anterior no sería necesaria, solo la declaración del complemento).

¿Esto es posible?

+0

¿Alguna vez encontrar una manera de evitar la parte ejecuciones por completo? – Zalumon

Respuesta

7

Ponga un @phaseannotation en sus anotaciones Mojo classdef.

El doctor dice:

@phase <phaseName> 

Esta anotación especifica la fase por defecto para este objetivo. Si agrega una ejecución para este objetivo a un pom.xml y no especifica la fase, Maven vinculará el objetivo a la fase especificada en esta anotación de forma predeterminada.

Si esto no funciona, creo que se justifica una JIRA.

+4

Ok, esto funciona ** parcialmente ** realmente, no tengo que explicitar la parte de 'fase', pero todavía tengo que poner todo el' 'mierda –

+7

Oh, sí, definitivamente. Para evitar eso, necesita un ciclo de vida personalizado. – bmargulies

-5

Asocias el complemento a maven lifecyle goal. La configuración del complemento debe declararse en fase.

Por ejemplo si usted wan para ejecutar algún plug-in durante acumulación fase tendrá que hacer algo como esto:

<project> 
... 
... 
<build> 
    <plugin> 
     **Configuration of plugin** 
    </plugin> 
</build> 
</project> 

Lea cuidadosamente acerca de los ciclos de vida de Maven aquí (que es fundamental para la comprensión del experto): http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

y luego leer acerca de cómo configurar un plugin: http://maven.apache.org/guides/mini/guide-configuring-plugins.html

PS Entrar en la lógica de maven no es fácil al principio. Pero es gratificante después.

+0

¿Quiere decir que debería poner la configuración '

6

Cree una instancia de src \ main \ resources \ META-INF \ plexus \ components.xml en su complemento.

Crea una correlación de LifeCycle para los tipos de artefactos que deseas que tu Mojo admita. Asegúrese de que enumera todas las fases y complementos que desea admitir. Probablemente sea mejor copiar de uno de maven-core.jar.

A continuación, agregue su complemento al Ciclo de vida apropiado en la fase en la que desea construirlos.

Por ejemplo, la consumir-aar Mojo añaden a la compilar fase de la aar ciclo de vida.

<!-- Android archive (aar) support --> 
<component> 
    <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role> 
    <role-hint>aar</role-hint> 
    <implementation> 
    org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping 
    </implementation> 
    <configuration> 
    <phases> 
     <generate-sources> 
     com.jayway.maven.plugins.android.generation2:android-maven-plugin:generate-sources 
     </generate-sources> 
     <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> 
     <compile> 
     com.jayway.maven.plugins.android.generation2:android-maven-plugin:consume-aar, 
     org.apache.maven.plugins:maven-compiler-plugin:compile 
     </compile> 
0

Esto es posible, pero es una característica de maven no documentada.

Utilice esta components.xml:

<component-set> 
    <components> 
    <component> 
     <role>org.apache.maven.lifecycle.Lifecycle</role> 
     <implementation>org.apache.maven.lifecycle.Lifecycle</implementation> 
     <role-hint>myplugin</role-hint> 
     <configuration> 
      <id>accurest</id> 
      <phases> 
       <phase>my-plugin-not-used-phase</phase> 
      </phases> 
      <default-phases> 
       <compile> 
        my.package:my-plugin:${project.version}:my-goal 
       </compile> 
      </default-phases> 
     </configuration> 
    </component> 
</components> 

pero su plugin necesita ser añadido con <extensions>true</extensions> de modificar el ciclo de vida existente.

Más: How to bind plugin mojos (goals) to few phases of default lifecycle?

real del proyecto: https://github.com/spring-cloud/spring-cloud-contract/blob/master/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/resources/META-INF/plexus/components.xml

Cuestiones relacionadas