【问题标题】:Compatibility between compile time Hibernate version and Wildfly's provided on编译时 Hibernate 版本和 Wildfly 提供的兼容性
【发布时间】:2018-05-24 20:25:39
【问题描述】:

我当前项目的目标是 Wildfly 10,它提供了 JPA 2.1 的实现:它使用 Hibernate 5.0.7.Final

在版本 5.0.12.Final 中使用休眠编译时依赖是否安全?还是应该坚持使用低于或等于应用程序服务器运行的版本?

我不太了解这个主题,所以欢迎任何指向一个好的解释的指针。

注意:我知道wildfly上的hibernate版本是可以升级的,但是在我们的环境中不应该这样做。

谢谢

--已编辑--

有关 pom.xml 的更多详细信息:

    <!-- Java EE 7 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    ...
    <!-- compile dependencies -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <scope>compile</scope>
        <optional>true</optional>
        <version>5.0.12.Final</version>
    </dependency>

核心 hibernate 库可能由容器提供,但我依赖 hibernate-jpamodelgen 来进行类型安全标准查询。

有没有办法知道 javaee-api 工件包含什么?

【问题讨论】:

  • 为什么要为您的项目添加休眠依赖项?只需使用 JPA 并让 wildfly 决定持久性实现 ;-)。

标签: hibernate jakarta-ee wildfly


【解决方案1】:

编译意味着您将把依赖项与您的 app/war 打包在一起。首先,如果您不了解类加载器如何为您在 Wildfly 中的每个部署工作,您可能会遇到一些类路径问题。除此之外,如果每个应用程序都打包了它们已经在类路径中的依赖项,那么最终会导致大量不必要的磁盘空间和内存使用。

我推荐你阅读this

【讨论】:

  • 感谢您提供此链接。正如你所看到的,我编辑了我的原始帖子,因为我的第一个假设不正确:看起来,hibernate 核心库没有编译依赖。这就解释了为什么我在战争档案中找不到 jar。
【解决方案2】:

相对安全,Hibernate 团队不允许在微更新中更改 API。

您需要确保您的代码仅使用 API;如果您有自定义扩展来提取内部实现细节和/或扩展内部,您可能会遇到一些变化;确保安全的最佳方法是在开发时使用完全相同的版本。

更好的选择是升级您使用的 Hibernate 版本;您可以通过将其包含在您的应用程序中来使用更新的版本(尽管这需要设置一些额外的配置属性 - 请参阅 WildFly JPA wiki)或升级应用程序服务器中的版本。

【讨论】:

  • 感谢您的回复。我添加了 pom.xml 文件的 sn-p。我找不到任何其他对休眠的引用。我检查了生成的war文件的内容(特别是WEB-INF/lib文件夹),实际上没有hibernate jar文件。你知道它是否因为 javaee-api 依赖而编译吗?
【解决方案3】:

根据您发布的 pom.xml 以及您针对 Wildfly 的事实,我会将其设置为提供,并将版本设置为 Wildfly 10 提供的版本。这样是最安全的选择:

  <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-jpamodelgen</artifactId>
     <version>5.0.7.Final</version>
     <scope>provided</scope>
  </dependency>

另外两个javaee-apiredundantjavaee-web-apijavaee-api 的子集。我会删除javaee-web-api

【讨论】:

  • 嗨罗伯特,你说的冗余是对的,我删除了 javaee-web-api,我听从了你的建议。
猜你喜欢
  • 2020-01-21
  • 2013-08-03
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 2016-11-18
相关资源
最近更新 更多