我可以从Java模块中排除导出的包吗?

Jac*_* G. 6 java jta java-9 java-module

模块jta和java.sql将包javax.transaction.xa导出到模块dom4j

如您所见,两个模块jtajava.sql导出相同的包,javax.transaction.xa.但是,包中jta包含我需要的不存在的类java.sql.我根本不需要java.sql模块,但我需要java.sql.SQLException.

是否有可能阻止java.sql出口javax.transaction.xa

Nam*_*man 5

JTA GitHub阅读以下内容,以确认 @Alan 在评论中已经指出的内容-

这个独立版本的 Java(TM) Java Transaction API (JTA) 使用 Java 平台模块系统“自动”模块名称 java.transaction, 来匹配 JDK 9 中使用的模块名称。未来版本将包括完整的模块元数据。此外, javax.transaction.xa包现在归 Java SE 所有。

您可以使用 Maven 版本(例如):-

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是 的发行说明JTA1.3MR


此外,JEP 320:删除 Java EE 和 CORBA 模块也对此进行了详细阐述 -

...该javax.transaction.xa包支持 JDBC 中的 XA 事务。此“XA 包”java.sql与Java SE 9 中的模块中的 JDBC 位于同一位置。由于该java.sql模块不可升级,因此独立版本的 JTA 不可能覆盖 Java SE 版本的 XA 包

并进一步注意解决方案的可扩展性

...为了便于维护,Java SE 中的 XA 包将来可能会移动到不同的不可升级模块,但作为架构问题,它将长期与 JDBC 一起保留在 Java SE 中...

并按计划

2018 年初,JTA 1.3 将被定义为仅包含 CORBA 互操作包;JAR 文件将相应更新。

  • 我已经知道这个*修复*,但我只能通过删除 `module-info.java` 并通过命令行添加模块来让它工作(Spring 不想与模块路径合作:P )。不过谢谢! (2认同)
  • 对于 JDK 9 和 JDK 10,如果您将 JTA 1.3 作为模块部署,那么您需要将其部署在升级模块路径上,以便它覆盖运行时映像中的 java.transaction 模块。JDK 11 中不存在这种复杂情况,因为建议从 Java SE 11 中删除 java.transaction。 (2认同)