2010-03-18 19 views
77

Me gustaría que un objetivo de Maven desencadene la ejecución de una clase Java. Estoy tratando de migrar a través de una Makefile con las líneas:¿Cómo ejecuto un programa usando Maven?

neotest: 
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse" 

Y me gustaría mvn neotest para producir lo que make neotest hace actualmente.

Ni las páginas exec plugin documentation ni Maven Ant tasks tenían ningún tipo de ejemplo directo.

Actualmente, estoy en:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions><execution> 
    <goals><goal>java</goal></goals> 
    </execution></executions> 
    <configuration> 
    <mainClass>org.dhappy.test.NeoTraverse</mainClass> 
    </configuration> 
</plugin> 

No sé cómo activar el plugin desde la línea de comandos, sin embargo.

Respuesta

108

Con la configuración global que haya definido para el exec-maven-plugin:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.4</version> 
    <configuration> 
    <mainClass>org.dhappy.test.NeoTraverse</mainClass> 
    </configuration> 
</plugin> 

invocando mvn exec:java en la línea de comandos, se invocará el plugin que está configurado para ejecutar la clase org.dhappy.test.NeoTraverse.

Por lo tanto, para activar el plugin desde la línea de comandos, basta con ejecutar:

mvn exec:java 

Ahora bien, si se desea ejecutar el objetivo exec:java como parte de su construcción de serie, tendrá que obligar a la meta a un particular fase del default lifecycle. Para ello, declarar la phase a la que desea unirse a la meta en el elemento execution:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
    <execution> 
     <id>my-execution</id> 
     <phase>package</phase> 
     <goals> 
     <goal>java</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <mainClass>org.dhappy.test.NeoTraverse</mainClass> 
    </configuration> 
</plugin> 

Con este ejemplo, la clase sería ejecutado durante la fase de package. Esto es solo un ejemplo, adáptelo a sus necesidades. Funciona también con la versión 1.1 del complemento.

+1

estaba confundido al principio: 'exec: java' puede ser usado también para el código Scala y Clojure, no tiene que ser código Java per se. – rightfold

+4

La versión debería ser 1.4.0 –

18

Con el fin de ejecutar múltiples programas, también necesita una sección profiles:

<profiles> 
    <profile> 
    <id>traverse</id> 
    <activation> 
     <property> 
     <name>traverse</name> 
     </property> 
    </activation> 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <configuration> 
      <executable>java</executable> 
      <arguments> 
       <argument>-classpath</argument> 
       <classpath/> 
       <argument>org.dhappy.test.NeoTraverse</argument> 
      </arguments> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 

Ésta es ejecutable como a continuación:

mvn exec:exec -Dtraverse 
+0

¿Qué está pasando con ' -classpath' ¿línea? No creo que eso sea correcto – GreenGiant

+0

Sí, lo más probable es que la etiqueta '' haya llegado por error y deba eliminarse. Entonces esa línea se verá solo: ' -classpath' –

+3

Eso no es un error. Eso indica que las dependencias especificadas en pom.xml se deben usar como parte de la ruta de clase. – user924272

Cuestiones relacionadas