Comment exécuter un programme avec Maven?


120

J'aimerais qu'un objectif Maven déclenche l'exécution d'une classe java. J'essaye de migrer sur un Makefileavec les lignes:

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

Et j'aimerais mvn neotestproduire ce que make neotestfait actuellement.

Ni la documentation du plugin exec ni les pages de tâches de Maven Ant ne contenaient 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>

Cependant, je ne sais pas comment déclencher le plugin depuis la ligne de commande.

Réponses:


149

Avec la configuration globale que vous avez définie pour exec-maven-plugin:

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

l'invocation mvn exec:javasur la ligne de commande appellera le plugin qui est configuré pour exécuter la classe org.dhappy.test.NeoTraverse.

Donc, pour déclencher le plugin à partir de la ligne de commande, exécutez simplement:

mvn exec:java

Désormais, si vous souhaitez exécuter l' exec:javaobjectif dans le cadre de votre build standard, vous devrez lier l'objectif à une phase particulière du cycle de vie par défaut . Pour ce faire, déclarez le phaseauquel vous souhaitez lier l'objectif dans l' executionélément:

<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 serait exécutée pendant la packagephase. Ceci n'est qu'un exemple, adaptez-le à vos besoins. Fonctionne également avec la version 1.1 du plugin.


1
J'étais confus au début: exec:javapeut être utilisé pour le code Scala et Clojure également, il n'est pas nécessaire que ce soit du code Java en soi.
rightfold

8
La version devrait être 1.4.0
Walery Strauch

A travaillé pour moi! THX!
mrddr le

25

Afin d'exécuter plusieurs programmes, j'avais également besoin d'une profilessection:

<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>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

Ceci est alors exécutable comme:

mvn exec:exec -Dtraverse

1
Que se passe-t-il avec cette <argument>-classpath</argument><classpath />ligne? Je ne pense pas que ce soit correct.
GreenGiant

1
Oui, la <classpath />balise est probablement arrivée par erreur et devrait être supprimée. Donc, cette ligne aura l'air juste:<argument>-classpath</argument>
Dimitry K

7
Ce n'est pas une erreur. Cela indique que les dépendances spécifiées dans le pom.xml doivent être utilisées dans le cadre du chemin de classe.
user924272
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.