我想在maven安装阶段运行一个简单的exec命令。实现这一目标的最简单方法是什么? (不添加新插件)
答案 0 :(得分:15)
如果要将此命令作为正常构建生命周期的一部分运行,除了exec
阶段install
目标之外没有其他方法:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>my-exec</id>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
<inherited>false</inherited>
</execution>
</executions>
<configuration>
<executable>COMMAND</executable>
</configuration>
</plugin>
</plugins>
</build>
我使用上面的配置(使用ls
作为“COMMAND”)和一个新创建的maven项目进行了一个简单的测试,并且运行mvn install
会产生以下输出:
$ mvn install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building maven-exec-testcase [INFO] task-segment: [install] [INFO] ------------------------------------------------------------------------ ... [INFO] [install:install {execution: default-install}] [INFO] Installing /home/pascal/Projects/maven-exec-testcase/target/maven-exec-testcase-1.0-SNAPSHOT.jar to /home/pascal/.m2/repository/com/mycompany/app/maven-exec-testcase/1.0-SNAPSHOT/maven-exec-testcase-1.0-SNAPSHOT.jar [INFO] [exec:exec {execution: my-exec}] [INFO] pom.xml [INFO] src [INFO] target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 12 seconds [INFO] Finished at: Tue Jan 05 19:26:04 CET 2010 [INFO] Final Memory: 11M/75M [INFO] ------------------------------------------------------------------------
正如我们所看到的,该命令在install
阶段的结尾处执行(在将工件复制到本地存储库之后)。
如果你真的不想将代码段添加到你的pom中,那么你必须在命令行exec:exec
之后显式调用install
,如whaley建议的那样。
答案 1 :(得分:4)
maven默认生命周期以安装和部署目标结束 - 这些目标没有预先版本和后版本。
可能的选择是:
将exec:exec mojo绑定到部署阶段。我会警告你反对这个想法,因为部署阶段实际上意味着将工件部署到远程maven存储库。
在mvn调用中安装目标后运行exec:exec mojo ...例如:
mvn clean install exec:exec -Dexec.executable =“yourcommand”-Dexec.args =“arguments”
如果您有一个多模块项目,请在&lt; modules&gt;的末尾创建另一个模块。并将exec:exec绑定到该模块中的任何常规目标。这将强制此特定模块在最后运行,假设未满足其他criteria the reactor looks at。我使用的maven项目采用的常见策略是“当有疑问时,创建另一个模块”。