Як виконати програму за допомогою Maven?


120

Я хотів би, щоб мета Maven запустила виконання класу java. Я намагаюся переходити через Makefileрядки:

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

І я хотів би mvn neotestвиробити те, що make neotestробить зараз.

Ні документація на плагін Exec, ні сторінки завдань Maven Ant не мали жодного прямого прикладу.

На даний момент я за адресою:

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

Я не знаю, як запустити плагін із командного рядка.

Відповіді:


149

З глобальною конфігурацією, яку ви визначили для плагіна exec-maven:

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

виклик mvn exec:javaу командному рядку викликає плагін, налаштований для виконання класу org.dhappy.test.NeoTraverse.

Отже, щоб запустити плагін з командного рядка, просто запустіть:

mvn exec:java

Тепер, якщо ви хочете виконати exec:javaціль як частину стандартної збірки, вам потрібно прив’язати мету до певної фази життєвого циклу за замовчуванням . Для цього оголосіть, phaseдо якого ви хочете прив’язати мету в 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>

У цьому прикладі ваш клас буде виконаний під час packageфази. Це лише приклад, адаптуйте його під свої потреби. Працює також із плагіном версії 1.1.


1
Спочатку я був розгублений: exec:javaйого можна використовувати і для коду Scala, і для Clojure, але це не обов'язково як код Java.
праворуч

8
Версія повинна бути 1.4.0
Валері Штрауч

Працювали для мене! Дякую!
mrddr

25

Для виконання декількох програм мені також знадобився 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>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

Потім це виконується як:

mvn exec:exec -Dtraverse

1
Що відбувається з цією <argument>-classpath</argument><classpath />лінією? Я не думаю, що це правильно.
GreenGiant

1
Так, найімовірніше, <classpath />тег потрапив туди помилково і його слід видалити. Тож цей рядок буде виглядати просто:<argument>-classpath</argument>
Димитрій К

7
Це не помилка. Це вказує на те, що залежності, вказані в pom.xml, повинні використовуватися як частина шляху до класу.
user924272
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.