2013-07-09 25 views
0

我在寻找解决方案以构建不同版本的EAR(使用maven-ear-plugin)时遇到了一些问题。有条件地使用maven构建EAR文件

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

到目前为止,我发现的唯一方法是引入配置文件“blubb”,其中我重写了jar-plugin配置,以包含来自src/test/resources以及一些java文件的ejb-jar.xml ,并将自定义后缀添加到我的工件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和见解的高度赞赏:-)

回答

0

我找到了一些方法来实现两个EAR模块,我想要的东西,使用maven-dependency-plugin。

基本的问题是,没有代码应该被重复,但是,同样的模块应该建立与额外/替换内容的需求。

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

这样我得到了第二个模块,它有第一个模块的内容,再加上一些修改,然后我可以对我的调整模块的主要来源做出修改。

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

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

0

最好的解决方法是不创建分离的EAR的用于从相同的测试/ PROD等。但如果你真的喜欢做的事,你应该创建两个单独的耳模块:

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

这意味着具有可以有不同的描述符等

+0

但假设我有200个模块,每个模块都安装在我的本地回购站中,然后执行我的部署pom,在那里我收集所有200个依赖关系并将它们包装到我的耳朵中。我不确定,在这个步骤中,如何调整单个项目的内容,例如,200个项目中有50个需要在其META-INF中包含ejb-jar.xml。我必须首先以不同的方式构建它们,并带有不同的工件ID,对吗?因此,所有200个项目将不得不有所不同,我不知道如何实现这一点,不能真正复制每个模块... – pete83

+0

两耳的原因是,某些组件需要嘲笑针对耳朵的某种类型的测试... – pete83