Вопрос

Я хочу запустить простую фазу установки командной строки exec на maven.Каков самый простой способ добиться этого?(без добавления новых плагинов)

Это было полезно?

Решение

Если вы хотите запустить эту команду как часть обычного жизненного цикла сборки, нет другого способа, кроме привязки exec цель на install фаза:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.1.1</version>
      <executions>
        <execution>
          <id>my-exec</id>
          <phase>install</phase>
          <goals>
            <goal>exec</goal>
          </goals>
          <inherited>false</inherited>
        </execution>
      </executions>
      <configuration>
        <executable>COMMAND</executable>
      </configuration>
    </plugin>
  </plugins>
</build>

Я провел простой тест, используя конфигурацию, приведенную выше (используя ls как "КОМАНДА") со свежесозданным проектом maven и запущенным mvn install выдает следующий результат:

$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-exec-testcase
[INFO]    task-segment: [install]
[INFO] ------------------------------------------------------------------------
...
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/pascal/Projects/maven-exec-testcase/target/maven-exec-testcase-1.0-SNAPSHOT.jar to /home/pascal/.m2/repository/com/mycompany/app/maven-exec-testcase/1.0-SNAPSHOT/maven-exec-testcase-1.0-SNAPSHOT.jar
[INFO] [exec:exec {execution: my-exec}]
[INFO] pom.xml
[INFO] src
[INFO] target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12 seconds
[INFO] Finished at: Tue Jan 05 19:26:04 CET 2010
[INFO] Final Memory: 11M/75M
[INFO] ------------------------------------------------------------------------

Как мы можем видеть, команда выполнена в конце из числа install фаза (после копирования артефакта в локальное хранилище).

И если вы действительно не хотите добавлять фрагмент в свой pom, то вам придется явно вызвать exec:exec после install в командной строке, как предложил Уэйли.

Другие советы

Жизненный цикл maven по умолчанию заканчивается установить и развернуть цели - не существует предварительной и последующей версий этих целей.

Потенциальные варианты заключались бы в том, чтобы:

  • Привяжите exec:exec mojo к фазе развертывания.Я бы предостерег вас от этой идеи, поскольку фаза развертывания на самом деле предназначена для развертывания артефактов в удаленном репозитории maven.

  • Запустите exec:exec mojo после цели установки в вашем вызове mvn...например ,:

    mvn clean install exec:exec -Dexec.executable="yourcommand" -Dexec.args="аргументы"

  • Если у вас многомодульный проект, создайте еще один модуль в конце вашего <modules> и привяжите exec:exec к любой из обычных целей в этом модуле.Это заставит этот конкретный модуль запускаться последним, предполагая, что другие критерии, на которые смотрит реактор не выполняется.Обычная стратегия, которую я использую в проектах maven, над которыми я работаю, - "если сомневаетесь, создайте другой модуль".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top