Jak uruchomić program za pomocą Mavena?


120

Chciałbym, aby cel Maven wyzwalał wykonanie klasy Java. Próbuję przeprowadzić migrację za Makefilepomocą linii:

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

Chciałbym mvn neotestprodukować to, co make neotestrobi obecnie.

Ani dokumentacja wtyczki exec, ani strony zadań Maven Ant nie zawierały żadnego prostego przykładu.

Obecnie jestem na:

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

Nie wiem jednak, jak uruchomić wtyczkę z wiersza poleceń.

Odpowiedzi:


149

Z globalną konfiguracją , którą zdefiniowałeś dla 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>

wywołanie mvn exec:javaw wierszu poleceń spowoduje wywołanie wtyczki, która jest skonfigurowana do wykonywania klasy org.dhappy.test.NeoTraverse.

Aby więc uruchomić wtyczkę z wiersza poleceń, po prostu uruchom:

mvn exec:java

Teraz, jeśli chcesz wykonać exec:javacel w ramach swojej standardowej budowie, trzeba wiązać cel danego etapu w domyślnym cyklu . Aby to zrobić, zadeklaruj phasew executionelemencie , z którym chcesz powiązać cel :

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

W tym przykładzie Twoja klasa zostanie wykonana podczas packagefazy. To tylko przykład, dostosuj go do swoich potrzeb. Działa również z wtyczką w wersji 1.1.


1
Na początku byłem zdezorientowany: exec:javamoże być również używany do kodu Scala i Clojure, nie musi to być kod Java jako taki.
prawostronny

8
Wersja powinna być 1.4.0
Walery Strauch

Pracował dla mnie! Dzięki!
mrddr

25

Do wykonywania wielu programów potrzebowałem również profilessekcji:

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

Jest to następnie wykonywalne jako:

mvn exec:exec -Dtraverse

1
Co się dzieje z tą <argument>-classpath</argument><classpath />linią? Nie sądzę, że to prawda.
GreenGiant

1
Tak, najprawdopodobniej <classpath />tag trafił tam przez pomyłkę i powinien zostać usunięty. Więc ta linia będzie wyglądać po prostu:<argument>-classpath</argument>
Dimitry K

7
To nie pomyłka. Oznacza to, że zależności określone w pom.xml powinny być używane jako część ścieżki klasy.
user924272
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.