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.

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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.