我刚刚将一个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>
答案 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生命周期(即编译,测试,打包)。mvn antrun:run
块作为<configuration>
定义的子项。如果您选择第二个解决方案,那么您将拥有<plugin>
这样的解决方案:
pom.xml