如何在命令行上指定所需EAR模块的包装

时间:2014-11-10 16:44:34

标签: maven-3 java-ee-6

我有一个典型的多模块JavaEE设置。 POM类型的根项目(公共父项),它包含所有JavaEE项目作为模块。我还有一个EAR类型的项目,它定义了EAR档案中模块的包装。通过root项目运行“mvn package” - 所有模块都构建,打包,最后一步是构建EAR并与内部相应的模块打包(JAR,WAR等),生成“application.xml”文件自动并包含在EAR中。

我的问题是,是否有任何高级选项可用于指定我想要包含在EAR中的模块列表?排除覆盖maven-ear-plugin配置的“modules”元素中定义的内容。其背后的动机是,对于我们的项目,我们每次都会生成包含不同模块集的EAR。

我知道使用maven配置文件,变量和模块的“exclude”元素是可以实现的,但是,这样的解决方案需要为每个可能包含在EAR中的模块集定义配置文件。应该有一些优雅的解决方案。

PS。另外,我不能通过“sed”或类似的工具/插件来考虑替换文本。

2 个答案:

答案 0 :(得分:1)

最后,我选择了"个人资料"解。这是我实现它的方式。 最初,"排除"每个模块的属性设置为" true":

<properties>
     ...
     <module_name.exclude>true</module_name.exclude>
     ...
</properties>

EAR项目中的所有模块都以这种方式定义:

....
<ejbModule>
    <groupId>xx.xxx.xxx</groupId>
    <artifactId>module_name</artifactId>
    <bundleDir>/</bundleDir>
    <bundleFileName>module_name-ejb.jar</bundleFileName>
    <excluded>${module_name.exclude}</excluded>
</ejbModule>
....

同时我定义了这样的配置文件:

<profile>
  <id>module_name</id>
  <properties>
      <module_name.exclude>false</module_name.exclude>
  </properties>
</profile>

毕竟,每当我执行&#34; mvn -P module_name package&#34;激活相应的配置文件,设置&#34;排除&#34;财产到&#34;假&#34;结果模块得到部署。由于maven支持组合配置文件,因此还可以执行&#34; mvn -P module_name1,module_name2,... package&#34;在这种情况下,只会部署指定的模块。

我还定义了一个&#34; full&#34;默认情况下通过<activeByDefault>true</activeByDefault>激活的配置文件,它将所有模块的属性排除为&#34; false&#34;用所有模块构建EAR。因此,通过运行&#34; mvn package&#34;并且没有指定任何配置文件 - 我获得所有模块的EAR。

PS。我只是无法摆脱&#34;建筑&#34;不必要的依赖和包含(传递)依赖&#34; jars&#34;在&#34; lib&#34; EAR的目录。虽然它不会造成伤害,但它是一种冗余。

答案 1 :(得分:0)

首先要为不同的模块列表创建单独的模块,只需通过mvn clean package即可获得所有内容。个人资料可能是一个选项,但它并不是最好的。

要在不同文件中进行替换,您可以使用filtering