我有一个典型的多模块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”或类似的工具/插件来考虑替换文本。
答案 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。