persistence.xml中的Jar文件名问题



我们有一个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>

最新更新