【发布时间】:2013-12-30 23:39:14
【问题描述】:
我们有一个 maven 构建,它创建一个 ear 文件,该文件在其内部 lib 文件夹中包含带有 JPA 实体的库。 ear 文件有一个persistence.xml,我们在其中使用<jar-file> 标签添加实体:
<persistence-unit name="some-id">
<jar-file>MyEntities-1.0.0-SNAPSHOT.jar</jar-file>
MyEntities 库是使用单独的 maven 项目构建的。
只要在本地完成构建就可以正常工作,iaw,我只使用mvn install 并且不部署到远程快照存储库。由于本地 .m2 repo 和远程 repo 中的 jar 文件名不同,当我们开始部署到 repo 时,它会失败:
mvn install 在本地存储库上创建一个名为 MyEntities-1.0.0-SNAPSHOT.jar 的文件,mvn deploy 在远程存储库上创建一个名为 MyEntities-1.0.0-20131212-145600-42.jar 的文件。
现在,如果有人在我上次本地构建和 maven 之后部署的人寻找新的快照更新(基于策略或使用 -U 标志),它会将远程文件拉到本地 repo 并将具有该名称的 jar 复制到ear,这会在部署时导致 JPA 错误,因为找不到实体(persistence.xml 中声明的不同 jar 文件)。
除了在组装 ear 文件之前总是在本地构建之外,还有其他解决方案吗?
【问题讨论】:
-
我认为您应该检查部署插件的文档...查看此maven.apache.org/plugins/maven-deploy-plugin/usage.html 并搜索 -Dfile 参数。
-
不喜欢这种方法,因为它改变了已部署快照工件的命名约定。另外,在修改版本号或发布时我会遇到麻烦 - 因为现在我已经在部署插件的参数中设置了版本号。
-
只是推测:如果在“mvn deploy”之前执行“mvn clean”,您是否仍然遇到同样的问题?
-
@AndreiI - 当然,当 maven 解决快照依赖关系时,麻烦就开始了。如果最新版本已经在本地构建,一切都很好。如果在远程存储库中找到最新的,那么我会得到一个文件名与persistence.xml 上声明的名称不匹配的文件
-
@Michel - 不,抱歉,我不记得我们曾经解决过这个问题(在那个项目上,这是很久以前的事了)
标签: java maven jakarta-ee jpa