如何在不将执行附加到maven阶段的情况下调用maven antrun插件目标?
我使用maven antrun插件为我的项目初始化配置文件。但我只需要初始化配置文件一次,当我第一次开始初始化我的开发环境时,而不是每次启动jetty:run时 例如,如果我将阶段附加到流程资源,则每次启动jetty时,配置文件都会重置 所以我这样配置antrun:如何在不将执行附加到maven阶段的情况下调用maven antrun插件目标?,maven,maven-antrun-plugin,Maven,Maven Antrun Plugin,我使用maven antrun插件为我的项目初始化配置文件。但我只需要初始化配置文件一次,当我第一次开始初始化我的开发环境时,而不是每次启动jetty:run时 例如,如果我将阶段附加到流程资源,则每次启动jetty时,配置文件都会重置 所以我这样配置antrun: <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> <execu
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target name="init_config_files">
<!-- init files -->
</target>
</configuration>
</execution>
</executions>
</plugin>
maven antrun插件
跑
如果我启动mvn antrun:run,它只会返回以下错误:“[INFO]未定义ant目标-跳过”。同样,如果我指定target:“mvn antrun:run-Dtarget=init_config_files”。如果您需要在特殊条件下运行构建的某些部分(例如一次),您可以将这些部分放在一个文件中,然后调用Maven指定概要文件名,例如
mvn-p init_config_files包
尝试以下方法:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<target>
<property name="compile_classpath" refid="maven.compile.classpath" />
<echo message="compile classpath: ${compile_classpath}" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我也遇到了同样的问题,最终解决了:如果你只想运行一次ant任务,你可以这样设置插件:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<configuration>
<target name="init_config_files">
<!-- init files -->
</target>
</configuration>
</plugin>
maven antrun插件
并使用
mvn antrun:run
执行它。这样,ant的东西就不会绑定到任何阶段。到目前为止,我找到的最佳解决方案是:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>go-live</id>
<configuration>
<target>
<!-- go live! -->
<exec executable="${basedir}/deploy2server.sh" failonerror="true" dir="${basedir}">
<arg value="deploy" />
<arg value="${deploy.to.server}" />
<arg value="${jetty.port.live}" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
这个解决方案避免了目标被意外运行,也就是说,它不只是通过键入“mvn antrun:run”来运行,而且它也不会在常规的maven运行期间运行。在所有模块(包括针对最终分发包的集成)都成功执行后,我将在jenkins实例中使用此解决方案进行qa自动部署。我已经将此解决方案用于另一个插件,但我的想法受阻:“为什么antrun绝对希望附加到某个阶段?”:)Thx非常好的解决方案。使用此方法,您可以执行多个执行,并且可以选择其中一个。这是有史以来最好的答案!在你的帮助下,我现在可以分别执行死刑了:D谢谢
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>go-live</id>
<configuration>
<target>
<!-- go live! -->
<exec executable="${basedir}/deploy2server.sh" failonerror="true" dir="${basedir}">
<arg value="deploy" />
<arg value="${deploy.to.server}" />
<arg value="${jetty.port.live}" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
mvn antrun:run@go-live