Я хочу выполнить простую исполнительную фазу установки знатока командного пункта. Что самый простой путь возможен достигнуть этого? (не добавляя новые плагины)
Если вы хотите запустить эту команду как часть обычного жизненного цикла сборки, то нет другого способа, кроме как связать цель 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
в качестве "COMMAND") со свежесозданным проектом 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
в командной строке, как предложил whaley.
Жизненный цикл по умолчанию заканчивается с целями install и deployment - до и после установки этих целей не существует.
Потенциальными вариантами могут быть:
Привязать аранжировку exec:exec к фазе развертывания. Я бы предостерег вас от этой идеи, так как фаза развертывания на самом деле предназначена для размещения артефактов в удаленном репозитории maven.
Запустите mosjo exec:exec после цели установки в вызове mvn... например:
mvn clean install exec:exec -Dexec.executable="yourcommand" -Dexec.args="arguments"
Если у вас многомодульный проект, создайте другой модуль в конце вашего <модуля> и привяжите exec:exec к любой из обычных целей в этом модуле. Это заставит этот конкретный модуль запуститься последним в предположении, что другие критерии , на которые смотрит реактор, не выполнены. Общая стратегия, которую я использую с проектами maven, над которыми я работаю, это "в случае сомнений, создайте другой модуль".