2010-04-29 35 views
9

En el documento de Maven Introduction to the Build Lifecycle, se describe un objetivo de display:time que genera la hora actual. El plugin es el siguiente:¿Cómo se cambian los objetivos en Maven?

... 
<plugin> 
    <groupId>com.mycompany.example</groupId> 
    <artifactId>maven-touch-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-test-resources</phase> 
     <goals> 
     <goal>timestamp</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
... 

tengo varias preguntas relacionadas con este plugin:

  1. ¿Cómo puedo cambiar el nombre del objetivo de, por ejemplo, foo:bar? (¿Por qué no aparecen display ni time en ningún lugar del fragmento XML? ¿Cómo puede decir, al mirar el fragmento, qué objetivos define?)
  2. ¿Cómo puedo ejecutar este objetivo manualmente? (Para construcciones similares, el equivalente a mvn display:time a veces funciona, pero esto no funciona de manera consistente.)
  3. ¿Cómo puedo ver si este objetivo existe? (es decir, enumerar los objetivos disponibles; this question sugiere que esto es imposible.)

Respuesta

11

¿Cómo puedo cambiar el nombre del objetivo de, por ejemplo, foo:bar? (¿Por qué no display ni time aparecer en cualquier parte del fragmento XML? ¿Cómo puede saber, de mirar el fragmento, ¿qué objetivos se define?)

Para ser más precisos, en foo:bar, foo es el "objetivo plug-in prefijo "y bar es el" objetivo ".Y mientras que el último se deriva de convenciones de nomenclatura (o puede ser configured), el primero proviene de una anotación de BarMojo, la clase que implementa la lógica del complemento. Algo como esto:

/** 
* Do the wonderful bar. 
* @goal bar 
* @requiresProject false 
*/ 
public class BarMojo extends AbstractMojo 
{ 
    ... 
} 

Cambio de la meta requiere la modificación de la anotación del mojo de un plugin y su reconstrucción.

En cuanto a la documentación se ha vinculado a, hay una discrepancia clara entre el objetivo time y el fragmento de XML que se une un objetivo timestamp a la fase process-test-resources. Esto debe ser un error tipográfico.

¿Cómo puedo ejecutar este objetivo manualmente? (Para construcciones similares, el equivalente a la pantalla mvn:. Tiempo a veces funciona, pero esto no funciona constantemente)

Se le puede llamar así:

mvn com.mycompany.example:maven-touch-plugin:1.0:timestamp 

Se podría hacer este comando más corto añadiendo a la com.mycompany.examplePlugin Groups en su settings.xml (org.apache.maven.plugins y org.codehaus.mojo son declarados por defecto en caso que quiera saber cómo funciona para esos plugins)

<settings> 
    ... 
    <pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
    </pluginGroups> 
</settings> 

Entonces, debido a que el nombre del plugin coincide con los ${prefix}-maven-plugin o maven-${prefix}-plugin patrones, se podría ejecutar: se recomienda

mvn touch:timestamp 

Siguiendo la convención, pero, como ya he dicho, el prefijo puede ser también configured.

¿Cómo puedo ver si este objetivo existe?

Compruebe la documentación del complemento (derivado de las fuentes del complemento) o las fuentes del complemento.


Tenga en cuenta que también hay un error tipográfico en la parte inferior de la página mencionada del libro Maven. La forma de ejecutar el complemento con un prefijo personalizado debe ser mvn blah:echo (ver MVNREF-145).

0

Para su primer uno. El nombre del objetivo está definido por el complemento (hay una anotación para eso). Si tiene el código fuente, cambia eso. Al mirar el XML no se puede saber qué tipo de objetivos define un complemento solo los que se proporcionan en el XML. La mejor ubicación es mirar la documentación del complemento. Segundo: debe verificar los documentos. Por lo general, nombre de archivo: objetivo ... Puede ser que tenga que especificar la ruta completa del complemento (ID de grupo). Para el tercero: Normalmente debería poder usar el complemento de ayuda, eche un vistazo al docs.

2

Creo que existe la posibilidad de que la documentación tenga un error tipográfico. Los objetivos del complemento están especificados por plugin-name:goal-name. Ese XML vincularía el objetivo touch:timestamp a la fase process-test-resources. Ese fragmento no tiene nada que ver con display:time.

  1. Por lo que yo sé, es imposible cambiar el nombre de los objetivos de maven. (Parece que simplemente haría las cosas más confusas.) El código fuente del complemento es lo que define los objetivos, no el pom. La etiqueta de ejecuciones < > en el pom simplemente le permite vincular los objetivos de los complementos a fases, o reencaminar objetivos si ya tienen una fase predeterminada.

  2. Debe poder ejecutar un gol con prefix:goalName. Muy a menudo, el prefijo es simplemente lo que esté entre "maven-" y "-plugin" en el artefacto. p.ej. touch:timestamp. Esto es complicado en algunas situaciones ya que los autores de complementos pueden especificar un "metaPrefijo" diferente del nombre del complemento, pero nunca he tenido problemas con esto.

  3. La mejor manera de averiguar qué objetivos define un complemento, y a qué fases están vinculados por defecto es leer la documentación del complemento.

0

¿Cómo puedo cambiar el nombre de la meta, por ejemplo, foo: bar? (¿Por qué no aparece el tiempo ni la visualización en ningún lugar del fragmento XML? ¿Cómo se puede determinar, a partir del fragmento, qué objetivos define?)

Para cambiar el nombre del prefijo a "foo", necesita configurar el plugin de maven "plugin".

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-plugin-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <goalPrefix>foo</goalPrefix> 
    </configuration> 
    </plugin> 

Para cambiar el nombre de la meta, es necesario editar el Javadoc dentro de la fuente de Java Plugin

/** 
* Prints a timestamp to console 
* 
* @goal bar 
*/ 
public class TimestampMojo extends AbstractMojo { 
    // ... 
} 

Añadir el prefijo plugin para su configuración.archivo XML

<pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
</pluginGroups> 

¿Cómo puedo ejecutar manualmente este objetivo?

mvn com.mycompany.example:foo:bar 

o con el ajuste de prefijo plug-in (arriba)

mvn foo:bar 

¿Cómo puedo ver si existe este objetivo? (es decir, enumerar los objetivos disponibles)

Agregue lo siguiente al elemento del complemento maven plugin y puede usar foo: help para imprimir la lista de objetivos.

<plugin> 
... 
<executions> 
<execution> 
<id>generated-helpmojo</id> 
<goals> 
<goal>helpmojo</goal> 
</goals> 
</execution> 
</executions> 
</plugin> 
Cuestiones relacionadas