【问题标题】:JAXB & java.mail Java 11: Module problemsJAXB 和 java.mail Java 11:模块问题
【发布时间】:2020-03-26 12:58:48
【问题描述】:

当我将一个使用 jaxb 和 java.mail 的应用程序从 java 8 转换为 java 11 时,我遇到了很多看起来难以解决的模块问题。

我的 build.gradle 包括:

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
compile group: 'javax.mail', name: 'mail', version: '1.4.7'

我得到的模块错误包括:

the unnamed module reads package javax.activation from both java.activation and activation

我试过了,但没有出现同样的错误:

compile (group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1') {
    exclude group: 'javax.activation', module: 'activation'
}
compile group: 'javax.mail', name: 'mail', version: '1.4.7'

我试过这个也失败了:

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
compile (group: 'javax.mail', name: 'mail', version: '1.4.7') {
    exclude group: 'javax.activation', module: 'activation'
}

错误是:

java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory

还尝试在 gradle 中使用各种排除语句,这些语句都以某种方式失败:

compile (group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1') 
compile (group: 'com.sun.xml.bind', name: 'jaxb-core', version: '2.3.0.1') 
compile (group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0.1') 

还有运行时错误:

class not found com.sun.activation.registries.LogSupport

【问题讨论】:

    标签: jaxb jakarta-mail java-11 java-module


    【解决方案1】:

    解决方案

    最后我发现使用 glassfish.jaxb 和 jakarta.mail 有效。

    我的 build.gradle 包括:

    compile(group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.2') {
        exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
    }
    compile group: 'com.sun.mail', name: 'jakarta.mail', version: '1.6.5'
    

    我的 module-info.java 包括:

    requires java.xml.bind;
    requires jakarta.mail;
    requires com.sun.xml.bind;    // needed this for jlink
    

    希望这会有所帮助。

    【讨论】:

    • 我很高兴你能成功。从 JDK 11 中删除激活肯定存在一些问题,并且对于如何处理 API jar 存在分歧。我希望我们能够在这些组件的 Jakarta EE 9 版本中解决这个问题。将来,请考虑针对托管这些组件的 Eclipse 项目提交错误。
    • 谢谢比尔。很高兴看到对问题的认识以及未来解决方案的可能性。提交错误的指导很好,但我有一些基本问题:在这种情况下,我如何知道哪个组件导致问题,以及我如何知道谁管理组件以提交错误?我在 xml.bind 和 mail 周围看到了一组令人困惑的错误,我只是使用 gradle 查看依赖项,看看我是否能找出罪魁祸首——对我来说就像一个不透明的、无法运行的混乱。
    • 您选择了激活,但这看起来只是一个问题,您提到了 eclipse,但没有一个组件的包名称为 org.eclipse.xx?对不起,可能只是我在这里缺乏经验..
    • 如果您查看 jar 文件,或者如果您在 Maven Central 中找到它们,您会找到一个 pom.xml 文件,该文件应该有一个指向您所在的项目和/或源代码存储库的指针可以提交错误。稍微用谷歌搜索一下就可以找到同一个地方。
    • 明白。谢谢比尔的指点 - 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-02-24
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多