2010-03-18 7 views
77

Je voudrais qu'un objet Maven déclenche l'exécution d'une classe Java. Je suis en train de migrer sur une Makefile avec les lignes:Comment exécuter un programme en utilisant Maven?

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

Et je voudrais mvn neotest pour produire ce que make neotest fait actuellement. Les pages exec plugin documentation et Maven Ant tasks ne contenaient aucune sorte d'exemple simple.

Actuellement, je suis à:

<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> 

Je ne sais pas comment déclencher le plug-in de la ligne de commande, cependant.

Répondre

108

Avec la configuration globale que vous avez défini pour l'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> 

invoquant mvn exec:java sur la ligne de commande invoquera le plug-in qui est configuré pour exécuter la classe org.dhappy.test.NeoTraverse.

Ainsi, pour déclencher le plug-in de la ligne de commande, il suffit d'exécuter:

mvn exec:java 

Maintenant, si vous voulez exécuter l'objectif exec:java dans le cadre de votre version standard, vous devrez lier l'objectif à une phase particulière du default lifecycle. Pour ce faire, déclare le phase auquel vous voulez lier l'objectif dans l'élément 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> 

Avec cet exemple, votre classe sera exécutée pendant la phase package. Ceci est juste un exemple, adaptez-le à vos besoins. Fonctionne également avec le plugin version 1.1.

+1

J'étais confus au premier abord: 'exec: java' peut être Utilisé également pour le code Scala et Clojure, il ne doit pas forcément être du code Java en soi. – rightfold

+4

La version devrait être 1.4.0 –

18

Pour exécuter plusieurs programmes, j'ai aussi besoin d'une section 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> 

Ceci est alors exécutable comme:

mvn exec:exec -Dtraverse 
+0

Que se passe-t-il avec cette ' -classpath' ligne? Je ne pense pas que ce soit correct. – GreenGiant

+0

Oui, la plus probable "" tag est arrivé par erreur et devrait être retiré. Donc, cette ligne sera juste: ' -classpath' –

+3

Ce n'est pas une erreur. Cela indique que les dépendances spécifiées dans le fichier pom.xml doivent être utilisées dans le cadre du chemin d'accès aux classes. – user924272

Questions connexes