我想在 Maven 安装阶段运行一个简单的 exec 命令。实现这一目标的最简单方法是什么?(不添加新插件)
2 回答
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安装 [INFO] 正在扫描项目... [信息] --------------------------------------------- ------------------------- [INFO] 构建 maven-exec-testcase [INFO] 任务段:[安装] [信息] --------------------------------------------- ------------------------- ... [信息] [安装:安装{执行:默认安装}] [信息] 安装 /home/pascal/Projects/maven-exec-testcase/target/maven-exec-testcase-1.0-SNAPSHOT.jar 到 /home/pascal/.m2/repository/com/mycompany/app/maven-exec -testcase/1.0-SNAPSHOT/maven-exec-testcase-1.0-SNAPSHOT.jar [信息] [执行:执行{执行:我的执行}] [信息] pom.xml [信息]源 [信息] 目标 [信息] --------------------------------------------- ------------------------- [信息] 构建成功 [信息] --------------------------------------------- ------------------------- [INFO] 总时间:12 秒 [INFO] 完成时间:2010 年 1 月 5 日星期二 19:26:04 CET [INFO] 最终内存:11M/75M [信息] --------------------------------------------- -------------------------
正如我们所看到的,该命令在阶段结束时执行install
(在将工件复制到本地存储库之后)。
如果您真的不想将代码段添加到您的 pom 中,那么您必须按照whaley 的建议在命令行上显式调用exec:exec
after 。install
maven 默认生命周期以安装和部署目标结束——这些目标没有前后版本。
潜在的选择是:
将 exec:exec mojo 绑定到部署阶段。我会警告您不要使用这种想法,因为部署阶段实际上是将工件部署到远程 maven 存储库。
在您的 mvn 调用中安装目标之后运行 exec:exec mojo... 例如:
mvn clean install exec:exec -Dexec.executable="yourcommand" -Dexec.args="arguments"
如果您有一个多模块项目,请在 <modules> 末尾创建另一个模块并将 exec:exec 绑定到该模块中的任何常用目标。假设未满足反应器查看的其他标准,这将强制此特定模块最后运行。我在从事的 maven 项目中采用的一个常见策略是“当有疑问时,创建另一个模块”。