web-dev-qa-db-ja.com

Java 9のjdepsを使用した自動モジュールのモジュール情報の作成

私はジャクソンライブラリの3つの瓶を持っています

  1. jackson-core-2.8.10.jar
  2. jackson-annotations-2.8.0.jar
  3. jackson-databind-2.8.10.jar

コアとアノテーションの両方に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を生成するにはどうすればよいですか?

6
optional

簡単に言うと、はい、ライブラリを明示的なモジュールに変換する必要があります。

jlinkツールは、必要なモジュールのみを含むトリミングされたバイナリイメージを提供することを目的としています。問題は、自動モジュールが、すべてのJDKモジュールを読み取ることができるクラスパス(別名、名前のないモジュール)にアクセスできることです。したがって、何もトリミングされません。

このスレッド これもYouTubeビデオへのリンクとともに述べています。

この例commons-lang3-3.5.jarjlinkデモ用の明示的なモジュールに変換します。

Edit:より具体的には、 ここに例がありますjackson-corejackson-annotations、およびjackson-databindレガシーを順番に変換するスクリプトジャーからモジュラージャーへ。

アイデアは次のとおりです。

  • レガシーjarでjdeps --generate-module-infoを実行します
  • レガシーjarをフォルダーに解凍し、上から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
15
Michael Easter

受け入れられた回答は、それを提供しないライブラリのJava 9モジュール情報)を作成することを説明しています(それらは自動モジュールとして扱われます)。

Jacksonは、バージョン2.10.0以降、実際にはJava 9モジュール情報を提供します。

0
Alex Suzuki