実行されているかどうかを確認するJava8コンパイル済みアプリケーションを現在のOracle JDK9(9.0.1)で実行しようとしました。 guiceを起動すると、クラスパス上のjarに含まれるjavax.annotation.PreDestroyのClassNotFoundExceptionfが取得されます。 JSR-250拡張機能を使用しています:http://code.mycila.com/guice/Java9で既存のアプリケーションを実行すると、PreDestroyでGuice Injectorエラーが発生する
Java8では、通常通り実行されます。だから私はJDK 9がなぜランタイム環境のために後方互換性がないのだろうと思っています。私はそれが動作するように何かを逃したことがありますか?または、モジュールパスを設定し、Java9でアプリケーションをコンパイルして、Java9ランタイムで実行する必要がありますか?ここで
は、スタックトレースです:(フル一部はここにある:https://pastebin.ca/3894786)
c.g.i.Guice例外がキャッチされ、報告されました。メッセージ: にjava.lang.ClassNotFoundException:javax.annotation.PreDestroy java.lang.TypeNotPresentException:タイプjavax.annotation.PreDestroy が java.base/sun.reflect.generics.factory.CoreReflectionFactoryで
を提示していません。 makeNamedType(不明 出所)
は、一般的に言えば、あなたは再コンパイルまたはTを使用する必要はありません彼はモジュールパス。 JVM 9クラスパス上に置くだけでうまくいくはずです。クラスパスに 'PreDestroy'が含まれていますか?なぜなら、JDKパッケージのjavax.annotationに依存してきたからです。それを含むモジュールは[デフォルトでは解決されません](https://blog.codefx.org/java/java-9-migration-guide/#Dependencies-On-Java-EE-Modules)。 – Nicolai
@nullpointer:これは問題だと思われるリンクをありがとう。その場合、後方互換性はありません。 – Sorontur
[春:@Resource injectionがJDK9で動作を停止しました](https://stackoverflow.com/questions/46494522/spring-resource-injection-stopped-working-under-jdk9/46495550#46495550) [その他の回答](https://stackoverflow.com/a/46501720/1746118)の(2)にありますか? – nullpointer