【发布时间】:2016-09-14 14:43:51
【问题描述】:
我们正在使用大量 jar 构建 ear-files。其中一些包含定义持久性单元的 persistence.xml 文件,这些持久性单元使用
引用其他 jar<jar-file>other.jar</jar-file>
现在我们计划在未来使用 Maven,并且 jar 名称现在包含版本号。对于上述机制来说,这是一个巨大的问题:我们需要指定other-1.2.3.jar,而不是other.jar。但是在构建jar时无法知道正确的版本号,因为在ear的构建中,依赖中介可以将other-1.2.3.jar替换为other-2.3.4.jar,这样我在jar的persistence.xml中的引用就会失效。
所以我的问题是:在构建大型 ear 文件时,如何在 Maven 中正确管理 persistence.xml 文件?
编辑:
让我试着构建一个小例子来说明我的观点:
让我们有first-ejb-1.0.0.jar 取决于other-1.2.3.jar 和second-ejb-1.0.0.jar 取决于other-2.3.4.jar。 first-ejb-1.0.0.jar 和 second-ejb-1.0.0.jar 都包含一个带有 <jar-file> 条目的 persistence.xml。 first-ejb-1.0.0.jar 指向 other-1.2.3.jar 和 second-ejb-1.0.0.jar 指向 other-2.3.4.jar。到目前为止,一切顺利。
现在我从first-ejb-1.0.0.jar 和second-ejb-1.0.0.jar 构建一个耳朵。依赖关系已解决,但耳中只能包含other-*.jar 之一。比如说,我们的依赖中介选择了other-2.3.4.jar。然后first-ejb-1.0.0.jar 有一个死的<jar-file> 条目,指向一个不存在的jar。
【问题讨论】:
-
1-hint 是“Maven 资源过滤”是做这些事情的标准方式。 2-hint using spring "entityManagerFactory" 具有属性 "packagesToScan" 允许您在包列表中查找实体,因此通过包名称而不是 jar 名称进行引用。
-
@Hishamkh:您能否更具体地谈谈第一个提示?
-
我认为 other.jar 是您的项目之一。为什么依赖中介决定选择哪个版本? other.jar 不是您项目的直接依赖项吗??
-
请用 pom 结构更新你打算如何把东西放在一起,这样你可能会得到具体的答案。
-
问题如下:我建jar的时候,可以指定other.jar的版本,但是别人建ear的时候,里面可能有不同的版本:Maybe, someone else 用 2.3.4 构建了他的 jar,耳朵现在包含了 other.jar 的 2.3.4。问题是persistence.xml是在编译jar时创建的,但在构建ear时会读取它。
标签: java maven jar persistence