我们有一个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项目构建的。
只要构建是在本地完成的,这就可以很好地工作,因此,我只使用mvn install
,而不部署到远程快照存储库。当我们开始部署到回购时,由于本地.m2
回购和远程回购中的jar文件名不同,它失败了:
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文件之前始终在本地构建之外,还有什么解决方案可以解决这个问题吗?
这适用于我们的项目:
<persistence-unit name="foo">
<!-- property comes from root pom.xml -->
<jar-file>../lib/foo-${bar.version}.jar</jar-file>
<properties>
</properties>
</persistence-unit>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>META-INF/persistence.xml</include>
</includes>
</resource>
</resources>
</build>