【问题标题】:Jar file name problems in persistence.xmlpersistence.xml 中的 jar 文件名问题
【发布时间】: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


【解决方案1】:

这适用于我们的项目:

<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多