5

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

我在父 POM 上调用maven 包 assembly: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 插件失败并出现The parameters 'executable' for goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec are missing or invalid错误。

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

在打包阶段完成并且另一个插件(程序集)也完成后,我怎样才能运行这个(exec)插件一次?

换句话说,我想为我的所有子模块执行“包”,然后只从父模块执行一次 exec 插件。

我将不胜感激。

4

2 回答 2

1

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

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

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

从父项目执行此命令时,package assembly:assembly exec:exec仅对子项目执行。

但是,如果您真正想要完成的是您可以package在一个命令中完成所有模块,并且您希望在该阶段为该子模块执行assembly:assemblyand目标,那么您希望将这些插件绑定到该阶段. 例如:exec:execpackage

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
        <executable>myExecutable.exe</executable>
        <workingDirectory>${basedir}</workingDirectory>
        <arguments>....</arguments>
    </configuration>
    <executions>
        <!-- run the exec goal of this plugin every time this module is packaged -->
        <execution>
            <phase>package</phase>
            <goals><goal>exec</goal></goals>
        </execution>
    </executions>
</plugin>
于 2013-06-04T14:47:31.163 回答
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>
于 2016-08-10T06:44:58.143 回答