Как связать плагин maven antrun с чистой фазой

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

Ниже вы найдете выдержку из моего 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>

person user465374    schedule 20.10.2010    source источник


Ответы (1)


В вашем 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>
person Romain Linsolas    schedule 20.10.2010