Запуск задачи после установки maven
Вопрос
Я хочу запустить простую фазу установки командной строки 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, над которыми я работаю, - "если сомневаетесь, создайте другой модуль".