执行没有继承的Maven exec插件

时间:2013-06-04 14:09:14

标签: java maven exec

我有一个多模块maven java项目,我想执行exec插件,以便在创建Jars后执行自定义命令。

我在父POM上调用 maven包程序集:assembly exec:exec 来创建项目输出。

我在父POM中使用了以下内容:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <configuration>
            <executable>myExecutable.exe</executable>
            <workingDirectory>${basedir}</workingDirectory>
            <arguments>....</arguments>
        </configuration>
    </plugin>

执行此操作时,我的可执行文件已正确执行,但也为每个子模块执行。

为了尝试修复它,我将插件设置为不继承子模块:

<inherited>false</inherited>

但是现在exec插件失败了目标org.codehaus.mojo的参数'可执行文件':exec-maven-plugin:1.2.1:exec丢失或无效错误。

我已尝试将插件设置为在“executions”元素下运行,并将其分配给maven生命周期阶段。这导致可执行文件成功运行,但我无法执行此操作,因为我需要在执行此exec插件之前执行其他插件(程序集插件)。

如何在包阶段完成后运行此(exec)插件,另一个插件(程序集)也已完成?

换句话说,我想为所有子模块执行'package',然后从父模块执行一次exec插件。

我将不胜感激。

2 个答案:

答案 0 :(得分:1)

当您在父POM级别运行命令时,您告诉Maven为每个模块调用生命周期的那部分。

如果您只想为子模块调用exec:exec,则应该只为子模块声明该插件(因为它对继承父模块的其他模块没有意义)并使用{{1}调用Maven }或--projects参数:

mvn -pl子包程序集:程序集exec:exec

此命令从父项目执行时,仅对子项目执行-pl

但是,如果你真正想要完成的是你可以package assembly:assembly exec:exec单个命令中的所有模块,,你需要package和{{ 1}}在assembly:assembly阶段期间为该子模块执行的目标,然后是you want to bind these plugins to that phase。例如:

exec:exec

答案 1 :(得分:0)

这将跳过先前配置的exec-maven-plugin执行的继承:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </pluginManagement>
  ...
</build>