0

我很难找到构建不同版本 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。

我在各种来源读到过,根据配置文件生成同一项目的不同 jar 是邪恶的(即不是 Maven 方式)。(例如,在 Maven best practice for generate multiple jars with different/filtered classes?http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and -你为什么不应该/

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

有什么建议,我如何以 Maven 方式解决这个问题(使用修改后的部署描述符和其他类生成一个特殊的测试耳朵)?

高度赞赏提示和见解:-)

4

2 回答 2

0

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

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

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

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

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

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

于 2013-08-10T16:44:41.730 回答
0

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

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

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

于 2013-07-10T06:25:16.227 回答