模块化 Java 项目IntelliJ IDEA:模块“com.test”从“java.xml.bind”和“java.xml.bind”中读取包“javax.xml.bind”

问题描述

我正面临一个与模块相关的非常令人沮丧的问题。不知道为什么我得到了

Module 'com.test' reads package 'javax.xml.bind' from both 'java.xml.bind' and 'java.xml.bind'

如何解决

模块列表

module com.test {
    requires java.activation;
    requires slf4j.api;
    requires spring.context;
    requires java.persistence;
    requires spring.beans;
    requires org.apache.cxf.core;
    requires java.xml;
    requires java.xml.bind;
}

我的环境

IntelliJ IDEA 2020.3.1 (Community Edition)

JAVA JDK 11

enter image description here

更新 1

stackoverflow.com 上找到一个帖子,该帖子与我面临的问题非常相似 Package 'com.example' reads package 'javafx.beans' from both 'javafx.base' and 'javafx.base'

更新 2

[INFO] +- org.hibernate:hibernate-core:jar:5.4.23.Final:provided
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.4.1.Final:provided
[INFO] |  +- javax.persistence:javax.persistence-api:jar:2.2:provided
[INFO] |  +- org.javassist:javassist:jar:3.24.0-GA:provided
[INFO] |  +- net.bytebuddy:byte-buddy:jar:1.10.17:provided
[INFO] |  +- antlr:antlr:jar:2.7.7:provided
[INFO] |  +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.1.1.Final:provided
[INFO] |  +- org.jboss:jandex:jar:2.1.3.Final:provided
[INFO] |  +- com.fasterxml:classmate:jar:1.5.1:provided
[INFO] |  +- javax.activation:javax.activation-api:jar:1.2.0:compile
[INFO] |  +- org.dom4j:dom4j:jar:2.1.3:provided
[INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:5.1.2.Final:provided
[INFO] |  +- javax.xml.bind:jaxb-api:jar:2.3.1:compile
[INFO] |  \- org.glassfish.jaxb:jaxb-runtime:jar:2.3.1:compile
[INFO] |     +- org.glassfish.jaxb:txw2:jar:2.3.1:compile
[INFO] |     \- com.sun.istack:istack-commons-runtime:jar:3.0.7:compile
[INFO] +- org.springframework:spring-context:jar:5.3.1:provided
[INFO] |  +- org.springframework:spring-aop:jar:5.3.1:provided
[INFO] |  +- org.springframework:spring-beans:jar:5.3.1:provided
[INFO] |  +- org.springframework:spring-core:jar:5.3.1:provided
[INFO] |  |  \- org.springframework:spring-jcl:jar:5.3.1:provided
[INFO] |  \- org.springframework:spring-expression:jar:5.3.1:provided
[INFO] +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:compile
[INFO] |  \- jakarta.activation:jakarta.activation-api:jar:1.2.2:compile
[INFO] +- org.apache.cxf:cxf-core:jar:3.4.1:compile
[INFO] |  +- com.fasterxml.woodstox:woodstox-core:jar:6.2.1:compile
[INFO] |  +- org.apache.ws.xmlschema:xmlschema-core:jar:2.2.5:compile
[INFO] |  +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
[INFO] |  +- jakarta.jws:jakarta.jws-api:jar:2.1.0:compile
[INFO] |  +- jakarta.xml.soap:jakarta.xml.soap-api:jar:1.4.2:compile
[INFO] |  +- com.sun.activation:jakarta.activation:jar:1.2.2:compile
[INFO] |  +- com.sun.xml.messaging.saaj:saaj-impl:jar:1.5.2:runtime
[INFO] |  +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] |  \- org.jboss.spec.javax.rmi:jboss-rmi-api_1.0_spec:jar:1.0.6.Final:compile
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.3.3:runtime
[INFO] +- jakarta.xml.ws:jakarta.xml.ws-api:jar:2.3.3:compile
[INFO] +- com.sun.xml.ws:jaxws-rt:jar:2.3.3:compile
[INFO] |  +- com.sun.xml.ws:policy:jar:2.7.10:compile
[INFO] |  +- org.glassfish.ha:ha-api:jar:3.1.12:compile
[INFO] |  +- org.glassfish.external:management-api:jar:3.2.2:compile
[INFO] |  +- org.glassfish.gmbal:gmbal:jar:4.0.1:compile
[INFO] |  +- org.glassfish.pfl:pfl-tf:jar:4.1.0:compile
[INFO] |  +- org.glassfish.pfl:pfl-basic:jar:4.1.0:compile
[INFO] |  +- org.jvnet.staxex:stax-ex:jar:1.8.3:compile
[INFO] |  +- com.sun.xml.stream.buffer:streambuffer:jar:1.5.9:compile
[INFO] |  +- org.jvnet.mimepull:mimepull:jar:1.9.13:compile
[INFO] |  +- com.sun.xml.fastinfoset:fastinfoset:jar:1.2.18:compile
[INFO] |  \- org.codehaus.woodstox:stax2-api:jar:4.1:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.13.3:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.13.3:compile
[INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.13.3:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] +- org.junit.jupiter:junit-jupiter-params:jar:5.7.0:test
[INFO] |  \- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] +- org.junit.jupiter:junit-jupiter-api:jar:5.7.0:test
[INFO] |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |  \- org.junit.platform:junit-platform-commons:jar:1.7.0:test
[INFO] \- org.mockito:mockito-junit-jupiter:jar:3.5.10:test
[INFO]    \- org.mockito:mockito-core:jar:3.5.10:test
[INFO]       +- net.bytebuddy:byte-buddy-agent:jar:1.10.13:test
[INFO]       \- org.objenesis:objenesis:jar:3.1:test

解决方法

感谢 Naman 和原始帖子中提供的链接,我发现我在使用 jakarta.activation 时混合了 javax.activationcxf。 而且,因为 cxf-xjc-plugin:3.3.1 使用 javax.activation 从 xsd 文件生成代码,所以我不得不排除 pom 中的任何地方 jakarta.activation

更新 1

确切地说,我必须用 jakarta 依赖项替换 javax 依赖项 具有 javax 包命名结构(即 javax.activation 而不是 jakarta.activation),即

<has javax packaging structure>
<dependency>
    <groupId>jakarta.jws</groupId>
    <artifactId>jakarta.jws-api</artifactId>
    <version>2.1.0</version>
</dependency>

但不是

<has jakarta packaging structure>
<dependency>
    <groupId>jakarta.jws</groupId>
    <artifactId>jakarta.jws-api</artifactId>
    <version>3.0.0</version>
</dependency>