8

我正在迁移使用 JDK8 的 Java 项目以使用 JDK 11,然后发生与 javax 激活相关的错误。按照 Oracle 的迁移指南,我看到 java.activation 该模块已从 JDK 11 中删除。

之后,我建议添加第三方**activation-1.0.2.jar*,但仍然出现错误?请就问题提出建议?你能告诉我迁移源代码使用 Java 8 到 Java 11 的经验吗(带有 tomcat 9.0.12 的服务器。Eclipse 2018-09(4.9.0) 的编译器

这是详细错误:

Caused by: java.lang.NoClassDefFoundError: javax/activation/DataSource
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3167)
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2310)
    at org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:133)
    at org.apache.catalina.startup.WebAnnotationSet.loadMethodsAnnotation(WebAnnotationSet.java:285)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:138)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:328)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:768)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5007)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
4

1 回答 1

19

您似乎包含了不正确的工件(外部 jar)。

您应该包含javax.activation:javax.activation-api:1.2.0作为项目的外部依赖项以显式访问该类javax.activation.DataSource。相同的示例 Maven 依赖项将是:

<dependency>
  <groupId>javax.activation</groupId>
  <artifactId>javax.activation-api</artifactId>
  <version>1.2.0</version>
</dependency>

另外,请注意,如果使用模块化代码(包括module-info.java),您必须使用声明声明对库的依赖 -

requires java.activation;
于 2018-10-22T03:44:12.023 回答