如何将maven antrun插件绑定到干净阶段

时间:2010-10-20 12:43:29

标签: maven maven-antrun-plugin

我刚刚将一个ant项目翻译成了maven,但是由于maven并没有真正处理部署,所以我在构建中引入了一些antrun。但是,当我尝试执行它时,插件会跳过我的任务。例如,当我运行mvn clean antrun时:运行我得到以下消息:没有定义蚂蚁目标 - 跳过。同样的情况发生在我试图覆盖部署阶段以进行实际部署而不是上传到存储库的第二阶段。

请在下面找到我的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 个答案:

答案 0 :(得分:11)

pom.xml中,您可以定义两种类型的执行:

  • 一个链接到clean阶段
  • 一个与deploy阶段相关联。顺便提一下,对于Maven,deploy 意味着在服务器上部署我的(网络)应用程序,但是部署工件远程存储库。有关详细信息,请阅读deploy plugin information

因此,如果您运行命令 mvn deploy ,当Maven生命周期达到deploy阶段时,它将运行插件执行(pom.xml中的第二个)

但是,在您的情况下,您运行默认的Maven生命周期,因为您的命令是 mvn antrun:run (我不考虑{{1}这里的目标,因为它对问题无关紧要)。这可以在Maven中翻译为运行antrun插件,目标是。问题在于您没有为Ant插件的直接调用定义任何配置(包含Ant任务)。

所以有两个解决方案:

  • 将第二次执行绑定到clean阶段,然后运行install而不是mvn clean install。请注意,在这种情况下,您将运行整个Maven生命周期(即编译,测试,打包)。
  • 创建与任何执行相关的的此插件的配置。从XML的角度来看,只需添加(或移动)第二个mvn antrun:run块作为<configuration>定义的子项。

如果您选择第二个解决方案,那么您将拥有<plugin>这样的解决方案:

pom.xml