当我将使用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发布于 2020-03-26 12:58:48
溶液
最后,我发现使用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'我的模块-info.java包括:
requires java.xml.bind;
requires jakarta.mail;
requires com.sun.xml.bind; // needed this for jlink希望这能有所帮助。
https://stackoverflow.com/questions/60867836
复制相似问题