web-dev-qa-db-ja.com

JDK 11への移行で「Java.lang.NoClassDefFoundError:javax / activation / DataSource」というエラーが発生しました(Tomcat 9.0.12)

JavaプロジェクトはJDK8を使用してJDK 11を使用し、javaxアクティベーションに関連してエラーが発生しました。Oracleからの移行ガイドに従って、 Java.activationそのモジュールはJDK 11から削除されました。

その後、サードパーティ** activation-1.0.2.jar *を追加するよう提案しますが、それでもエラーが発生しましたか?問題についての提案をお願いします。移行ソースコードの使用経験について教えてくださいJava 8 to Java 11(Tomcat 9.0.12を備えたサーバー。Eclipse2018-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)
6
SuperBeam

誤ったアーティファクト(external 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>

また、ifに注意して、モジュール化コード(module-info.Javaを含む)を使用して、宣言を使用したライブラリへの依存-

requires Java.activation;
13
Naman