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

使用maven有条件地构建EAR文件,maven,jakarta-ee,ear,Maven,Jakarta Ee,Ear,我很难找到一个解决方案来构建不同版本的EAR(使用maven EAR插件) 我希望能够为生产或测试生成EAR,其中测试EAR具有不同的ejb-jar.xml部署描述符以及src/test文件夹中的一些附加类 到目前为止,我找到的唯一方法是引入一个概要文件“blubb”,在这里我覆盖jar插件配置,包括src/test/resources中的ejb-jar.xml以及一些java文件,并向我的工件id添加一个自定义后缀(或设置一个分类器)。然后在我的部署pom中引入相同的概要文件,在这里我依赖于拥

我很难找到一个解决方案来构建不同版本的EAR(使用maven EAR插件)

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

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

我从各种渠道读到,根据配置文件为同一个项目生成不同的jar是邪恶的(即不是Maven方式)。 (例如在 或 )

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

有什么建议吗?我如何用maven的方式解决这个问题(用修改过的部署描述符和附加类生成一个特殊的测试ear)

TIPP和见解受到高度赞赏:-)

最好的解决方案不是从同一产品中创建用于测试/生产等的独立EAR。但如果您真的喜欢这样做,您应该创建两个独立的ear模块:

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

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

我找到了一些方法来实现我想要的,使用maven依赖插件

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

我这样做的方式是创建第二个模块,并在其中声明我想要修改的模块作为唯一依赖项。然后在构建周期中,我添加了maven依赖插件,目标是“解包依赖项”,并选择在“准备包”时将原始依赖项解包到target/classes文件夹中

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

总之,在我看来,Maven有它的时代,但现在是时候使用更好的构建工具了;-)


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

但假设我有200个模块,每个模块都安装在我的本地repo中,然后我执行部署pom,在那里我收集所有200个依赖项并将它们打包到我的ear中。我不确定,如果200个项目中有50个需要在META-INF中使用ejb-jar.xml,我应该如何调整该步骤中单个项目的内容。我必须首先用不同的工件id以不同的方式构建它们,不是吗?因此,所有的200个项目都必须是不同的,我不知道如何实现这一点,不能真正复制每个模块…使用两个ear的原因是,某些组件需要模拟出来,以便针对ear进行某种类型的测试。。。