2013-06-04 26 views
4

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

我打电话给maven软件包程序集:assembly exec:exec对父POM创建项目输出。

我用父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生命周期阶段。这导致可执行文件成功运行,但我无法执行此操作,因为在执行此插件之前需要执行其他插件(assembly插件)。

在package阶段完成并且另一个插件(assembly)完成之后,我怎么才能运行这个(exec)插件?

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

我会很感激任何帮助。

+0

听起来就像是一种集成测试要启动? – khmarbaise

+0

我正在执行一个WIX项目,以便从我所有项目的输出中构建一个MSI。 – Omri

回答

1

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

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

MVN -pl子包组装:组装前高管:EXEC

此命令,从父项目执行时,只有孩子的项目执行package assembly:assembly exec:exec

但是,如果你真的要完成的是,你可以package在一个单一的命令模块,你想为孩子模块在package阶段执行的assembly:assemblyexec:exec目标,然后you want to bind these plugins to that phase。例如:

<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> 
+0

非常感谢您的详细解答,我想我可能还不够清楚。我希望exec插件在所有子模块的'包'阶段执行后在PARENT模块中运行。换句话说,我想为我的所有子模块执行一个包,然后再执行一次exec插件。我不希望插件在任何子模块中运行。 – Omri

+0

你也许可以将assembly和exec插件绑定到'integration-test'阶段,或者是在'package'之后但在'install'之前发生的类似阶段。要在exec插件之前执行程序集插件,可以选择一个比exec更先进的程序集,或者将它们都绑定到同一个阶段,但首先列出程序集(pom.xml中的列表顺序对于类似的东西很重要)。 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html –

+0

我可以问一下将执行的程序将执行什么吗?了解它的本质可能有助于理解完成您所寻找的最佳方式,或者弄清楚它是否甚至符合Maven的想法。它是某种集成测试,还是检查打包输出的有效性的东西? –

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>