我正在尝试熟悉Java 9的模块系统,并且遇到了一些我无法立即看到如何解决的问题。
我有一个Maven项目,它依赖于JDK9的hibernate-core
和jboss-transaction-api_1.2_spec
(5.2.11.Final)。 Hibernate传递了java.sql
。 jar和java.transaction.xa
模块都包含包:Error:java: the unnamed module reads package javax.transaction.xa from both jboss.transaction.api.1.2.spec and java.sql
,因此编译器会向我抛出大量的错误:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate-entitymanager.version}</version>
<exclusions>
<exclusion>
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
<groupId>org.jboss.spec.javax.transaction</groupId>
</exclusion>
</exclusions>
</dependency>
我以为我通过这样做解决了这个问题:
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
但是,虽然它稍后编译它会在运行时抛出此异常:
javax.transaction.SystemException
事实证明,jboss-transaction-api_1.2_spec
位于排除的java.sql
依赖项中,因此我无法排除它。但我也不能依赖java.sql.DataSource
包含java.sql
的{{1}},我也会使用它!
如何解决模块和.jar('自动模块'?)这个包含两个等价命名包但包含不同类的问题?我需要的两个!
修改
我看了一下Hibernate, Java 9 and SystemException,但这似乎改变了问题,所以现在编译器只是抱怨javax.transaction.api
和Error:java: the unnamed module reads package javax.transaction.xa from both java.sql and javax.transaction.api
java.transaction.xa
问题的关键在于两个模块中都存在sizeof("POR")
包。
这似乎是一个已知的问题,我看不出是否有任何明确/简单的解决方案: