Wie führe ich ein Programm mit Maven aus?

120

Ich möchte, dass ein Maven-Ziel die Ausführung einer Java-Klasse auslöst. Ich versuche Makefilemit den Zeilen über a zu migrieren :

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

Und ich möchte mvn neotestproduzieren, was make neotestaktuell geht.

Weder in der Dokumentation zum Exec-Plugin noch auf den Maven Ant-Aufgabenseiten gab es ein einfaches Beispiel.

Derzeit bin ich bei:

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

Ich weiß jedoch nicht, wie ich das Plugin über die Befehlszeile auslösen soll.

Wille
quelle

Antworten:

149

Mit der globalen Konfiguration , die Sie für das exec-maven-Plugin definiert haben:

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

Wenn Sie mvn exec:javaüber die Befehlszeile aufrufen, wird das Plugin aufgerufen, das für die Ausführung der Klasse konfiguriert ist org.dhappy.test.NeoTraverse.

Um das Plugin über die Befehlszeile auszulösen, führen Sie einfach Folgendes aus:

mvn exec:java

Wenn Sie das exec:javaZiel als Teil Ihres Standard-Builds ausführen möchten , müssen Sie das Ziel an eine bestimmte Phase des Standardlebenszyklus binden . Deklarieren phaseSie dazu das executionElement , an das Sie das Ziel binden möchten :

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

In diesem Beispiel würde Ihre Klasse während der packagePhase ausgeführt. Dies ist nur ein Beispiel. Passen Sie es an Ihre Bedürfnisse an. Funktioniert auch mit Plugin Version 1.1.

Pascal Thivent
quelle
1
Anfangs war ich verwirrt: exec:javaKann auch für Scala- und Clojure-Code verwendet werden, es muss kein Java-Code an sich sein.
Rechtsfalte
8
Version sollte 1.4.0 sein
Walery Strauch
Hat für mich gearbeitet! Vielen Dank!
21.
25

Um mehrere Programme ausführen zu können, brauchte ich auch einen profilesAbschnitt:

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

Dies ist dann ausführbar als:

mvn exec:exec -Dtraverse
Wille
quelle
1
Was ist mit dieser <argument>-classpath</argument><classpath />Linie los? Ich denke nicht, dass das richtig ist.
GreenGiant
1
Ja, höchstwahrscheinlich ist das <classpath />Tag versehentlich dort angekommen und sollte entfernt werden. Diese Zeile sieht also nur so aus:<argument>-classpath</argument>
Dimitry K
7
Das ist kein Fehler. Dies zeigt an, dass die in der Datei pom.xml angegebenen Abhängigkeiten als Teil des Klassenpfads verwendet werden sollten.
user924272