私はジャクソンライブラリの3つの瓶を持っています
コアとアノテーションの両方にmodule-info.Javaを正常に作成し、jdepsを使用してそれらを名前付きmaoduleに変換しました。
databindの場合、次のコマンドを試しました。
jdeps--generate-module-info。 --module-path%Java_HOME%\ jomds; jackson.core; jackson.annotations originalmods\jackson-databind-2.8.10.jar
現在、次のエラーが発生しています:
Missing dependence: .\jackson.databind\module-info.Java not generated
Error: missing dependencies
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator$Mode not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat$Value not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value not found.
Jackson-databindのmodule-info.Javaを生成するにはどうすればよいですか?
簡単に言うと、はい、ライブラリを明示的なモジュールに変換する必要があります。
jlink
ツールは、必要なモジュールのみを含むトリミングされたバイナリイメージを提供することを目的としています。問題は、自動モジュールが、すべてのJDKモジュールを読み取ることができるクラスパス(別名、名前のないモジュール)にアクセスできることです。したがって、何もトリミングされません。
このスレッド これもYouTubeビデオへのリンクとともに述べています。
この例commons-lang3-3.5.jar
をjlink
デモ用の明示的なモジュールに変換します。
Edit:より具体的には、 ここに例がありますjackson-core
、jackson-annotations
、およびjackson-databind
レガシーを順番に変換するスクリプトジャーからモジュラージャーへ。
アイデアは次のとおりです。
jdeps --generate-module-info
を実行しますmodule-info.Java
を追加し、再コンパイルして、再Zipします。秘訣は、依存関係のあるモジュラーjarは、コマンドラインパラメーターとしてそれらの依存関係を必要とすることです。たとえば、ここにjackson-databind
(いくらか抽象化されています)があります:
# here, jackson-core and jackson-annotations have been built
# jackson-databind
jdeps --module-path $ROOT_DIR/modules \
--add-modules jackson.annotations,jackson.core \
--generate-module-info work $JACKSON_DATABIND_JAR
javac --module-path $ROOT_DIR/modules \
--add-modules jackson.annotations,jackson.core \
-d $ROOT_DIR/classes module-info.Java
受け入れられた回答は、それを提供しないライブラリのJava 9モジュール情報)を作成することを説明しています(それらは自動モジュールとして扱われます)。
Jacksonは、バージョン2.10.0以降、実際にはJava 9モジュール情報を提供します。