【问题标题】:Java 9, Hibernate and java.sql/javax.transactionJava 9、休眠和 java.sql/javax.transaction
【发布时间】:2018-06-22 23:22:26
【问题描述】:

我尝试将使用 Hibernate 的项目“升级”到 Java 9,但在让模块正常运行时遇到问题。

我的module-info.java 的相关部分如下所示:

module test {

    ...

    requires java.base;
    requires hibernate.core;
    requires javax.transaction;
    requires java.sql;

}

我的 POM 中的相关依赖项是

  • org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec, 2.0.0.Alpha1
  • org.hibernate:hibernate-core, 5.2.12.Final
  • javax.transaction:javax.transaction-api, 1.2

问题是,如果我运行程序,我会得到一个NoClassDefFoundError 对应的javax.transaction.SystemException。我调查了这个,很明显,my module is missing a requires on javax.transaction

所以我在javax.transaction-api 上添加了一个模块依赖项。然后我继续尝试再次运行该程序 - 现在我错过了java.sql.SQLException

这是我遇到的问题:如果我 add a dependency on the module java.sql 包含此类,我最终会发生冲突:

模块从java.sqljavax.transaction.api 读取包javax.transaction.xa

java.sqljavax.transaction.api 包含不同的包,并且有一个共同点 (javax.transaction.xa),但我需要所有这些包

我该如何处理?我缺少什么简单的东西吗?

【问题讨论】:

  • 看起来类似于linked comment 和相关的reply from Alan
  • 有一个 JSR 907 的 MR 正在进行中 (jcp.org/en/jsr/detail?id=907) 来解决这个问题。一旦解决了这个问题,我希望 JTA API 工件的新版本能够以正确的模块名称发布,并且只导出 javax.transaction。

标签: java hibernate maven jdbc java-9


【解决方案1】:

使用 1.3 版而不是 javax.transaction-api 的 1.2 版,在此版本中 javax.transaction.xa 已被删除。

Maven 依赖:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.3</version>
</dependency>

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 2018-09-10
    • 2017-09-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多