12

我想在 Maven 安装阶段运行一个简单的 exec 命令。实现这一目标的最简单方法是什么?(不添加新插件)

4

2 回答 2

19

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:execafter 。install

于 2010-01-05T18:40:13.450 回答
5

maven 默认生命周期以安装部署目标结束——这些目标没有前后版本。

潜在的选择是:

  • 将 exec:exec mojo 绑定到部署阶段。我会警告您不要使用这种想法,因为部署阶段实际上是将工件部署到远程 maven 存储库。

  • 在您的 mvn 调用中安装目标之后运行 exec:exec mojo... 例如:

    mvn clean install exec:exec -Dexec.executable="yourcommand" -Dexec.args="arguments"

  • 如果您有一个多模块项目,请在 <modules> 末尾创建另一个模块并将 exec:exec 绑定到该模块中的任何常用目标。假设未满足反应器查看的其他标准,这将强制此特定模块最后运行。我在从事的 maven 项目中采用的一个常见策略是“当有疑问时,创建另一个模块”。

于 2010-01-05T15:33:53.217 回答