使用maven有条件地构建EAR文件

时间:2013-07-09 14:34:45

标签: maven java-ee ear

我在寻找构建不同版本的EAR(使用maven-ear-plugin)的解决方案时遇到了一些麻烦。

我想要的是能够为生产生成EAR或者为测试生成EAR,其中测试EAR具有不同的ejb-jar.xml部署描述符以及src / test文件夹中的一些其他类。

我到目前为止找到的唯一方法是引入一个配置文件“blubb”,我在其中覆盖jar-plugin配置,以包含来自src / test / resources的ejb-jar.xml以及一些java文件,并为我的工件ID添加自定义后缀(或设置分类器)。然后在我的部署pom中引入相同的配置文件,我依赖于拥有后缀的工件,来构建修改后的EAR。

我已经从各种来源读到,根据配置文件生成同一项目的不同罐子是EVIL(即不是Maven方式)。 (例如,在 Maven best practice for generating multiple jars with different/filtered classes? 要么 http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/

所以我的问题是,我该怎样做呢?如果我使用我的测试特定代码构建一个附加模块,以便在我的部署中有条件地包含在配置文件中,那么我的问题是我的ejb-jar.xml需要驻留在该jar文件的META-INF目录中,因为我的附加模块“test”模块将包含在一个不同的jar中,因此ejb-jar.xml不会应用于原始jar中的ejbs。

任何建议,我如何解决这个问题(使用修改过的部署描述符和附加类生成一个特殊的测试耳朵)maven方式?

高度赞赏Tipps和见解: - )

2 个答案:

答案 0 :(得分:0)

最好的解决方案是为同一个创建测试/产品等的单独EAR。但如果你真的喜欢这样做,你应该创建两个独立的耳模块:

 +-- root (pom.xml)
      +--- mod-ejb (pom.xml)
      +--- mod-xxx (pom.xml) 
      +--- mod-ear (pom.xml)
      +--- mot-it-ear (pom.xml)

这意味着有两个EAR模块可以有不同的描述符等。

答案 1 :(得分:0)

我找到了一些方法来实现,我想要的,使用maven-dependency-plugin。

基本问题是,没有代码应该被复制,但是,应该根据需要使用附加/替换内容构建相同的模块。

我这样做的方法是创建第二个模块,并在声明我想要修改的模块作为唯一的依赖。然后在构建周期中,我添加了目标为“unpack-dependencies”的maven-dependency-plugin,并选择在“prepare-package”时将原始依赖项解压缩到target / classes文件夹中。

这样我就得到了第二个模块,其中包含第一个模块的内容,以及我可以对调整后的模块的主要来源进行的一些修改。

总之,这仍然是一切,但很漂亮,在我看来Maven有时间,但现在是时候建立一个更好的构建工具了; - )

顺便说一句,如果有人知道一个更优雅的解决方案,我仍然是开放的...我的问题通常是,在任何情况下我都不想复制我的配置甚至我的代码。似乎Maven让这真的很难......