Как привязать плагин maven antrun к чистой фазе - PullRequest
7 голосов
/ 20 октября 2010

Я только что перевел проект ant на maven, однако, поскольку maven на самом деле не занимается развертыванием, я ввел немного antrun в сборку. Однако, когда я пытаюсь выполнить его, плагин пропускает мои задачи. Например, когда я запускаю mvn clean antrun: run я получаю следующее сообщение: Не задана цель ant - SKIPPED. то же самое происходит на втором этапе, на котором я пытаюсь переопределить этап развертывания, чтобы выполнить фактическое развертывание, а не загружать его в репозиторий.

Ниже приведен фрагмент моего файла pom.xml (тип: pom):

            <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>clean</id>
                    <configuration>
                        <task>
                            <echo>Cleaning deployed website</echo>
                        </task>
                        <tasks>
                            <delete dir="${deployRoot}/mydir/${env}"/>
                        </tasks>
                    </configuration>
                    <phase>clean</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>deployment</id>
                    <configuration>
                        <task>
                            <echo>Deploying website</echo>
                        </task>
                        <tasks>
                            <echo>Copying website artifact to deployment </echo>
                            <mkdir dir="${deployRoot}/mydir/${env}" />
                            <unzip
                                src="${project.basedir}/target/${env}.${project.version}.zip"
                                dest="${deployRoot}/mydir/${env}" />
                            <chmod perm="ugo+rx">
                                <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin">
                                    <include name="**/*.sh" />
                                    <include name="**/*.bat" />
                                </fileset>
                            </chmod>
                        </tasks>
                    </configuration>
                    <phase>deploy</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

1 Ответ

11 голосов
/ 20 октября 2010

В вашем pom.xml вы определяете два типа казней:

  • Один связан с clean фазой
  • Один связан с фазой deploy. Кстати, обратите внимание, что для Maven deploy означает не означает развертывание моего (веб-) приложения на сервере , но развертывание артефакта в удаленном хранилище . Пожалуйста, прочитайте deploy информацию о плагине для более подробной информации.

Поэтому, если вы запустите команду mvn deploy , когда жизненный цикл Maven достигнет фазы deploy, он запустит выполнение плагина (второй в вашем pom.xml).

Однако, в вашем случае вы не выполняете жизненный цикл Maven по умолчанию, так как ваша команда mvn antrun: run (я не рассматриваю цель clean здесь как это не имеет значения для проблемы). В Maven это можно перевести как запустить плагин antrun с целью запустить . Проблема в том, что вы не определяете конфигурацию (которая содержит задачи Ant) для прямого вызова вашего подключаемого модуля Ant.

Итак, два решения:

  • Свяжите второе выполнение с фазой install, а затем запустите mvn clean install вместо mvn antrun:run. Обратите внимание, что в этом случае вы будете запускать весь жизненный цикл Maven (то есть компиляцию, тесты, упаковку).
  • Создайте конфигурацию этого плагина, которая не связана с любым выполнением. С точки зрения XML, просто добавьте (или переместите) второй блок <configuration>, чтобы он стал дочерним для определения <plugin>.

Если вы выберете второе решение, у вас будет pom.xml как это:

       <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <!-- For cleaning -->
        <executions>
            <execution>
                <id>clean</id>
                <configuration>
                    <task>
                        <echo>Cleaning deployed website</echo>
                    </task>
                    <tasks>
                        <delete dir="${deployRoot}/mydir/${env}"/>
                    </tasks>
                </configuration>
                <phase>clean</phase>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <tasks>
                <echo>Copying website artifact to deployment </echo>
                ...
            </tasks>
        </configuration>
    </plugin>
...