torutkのブログ

ソフトウェア・エンジニアのブログ

JavaOne 2017の動画

JavaOne 2017のセッション動画がいくつか公開されています。今日はModule(Jigsaw)関係を2つほど見てみました。

JavaOne 2017の興味あるセッションの動画・資料へのリンクを次にまとめています。
http://www.torutk.com/projects/swe/wiki/JavaOne_2017_SF

Modules in One Lesson

コマンド操作と極簡単なプログラム(hello)のビルド・実行を通してModuleの初歩を紹介するセッションです。とっても分かりやすい内容です。

  • getClass().getModule() でモジュール情報を取得
  • 最低限のモジュール作成は、従来のJAR生成プロジェクトにmodule-info.javaを追加してコンパイル・JAR生成すればOK
  • 実行時のオプション指定が変わる(クラスパス指定からモジュールパス指定)
  • mainメソッドを持つクラスをjarのオプション--main-classで指定すればjava実行時にモジュール名を指定すればよい
  • helloとtextと2つのモジュールに分割して依存関係記述する例を紹介
  • jlinkでは作ったプログラムの実行に必要なJavaランタイムだけ抽出
  • 循環参照はコンパイルエラー

Migrating to Modules

jacksonライブラリを使う従来のプログラムをモジュール対応させる作業を、コマンド操作と極簡単なプログラム(tweetsum)のビルド・実行を通して紹介するセッションです。これも分かりやすい内容です。

非モジュールなJARファイルをモジュールパスに置いてモジュール同様に扱うことができます。「Automatic module」と呼ばれる仕組みです。
モジュール名は、JARファイル名から生成されます。セッションでは、Java 8以前でビルドされたjacksonのJARファイルをAutomatic moduleの仕組みで扱う例を紹介しています。

JARファイル名 Automatic moduleで扱うモジュール名
jackson-core-2.6.6.jar jackson.core
jackson-databind-2.6.6.jar jackson.databind
jackson-annotations-2.6.6.jar jackson.annotations
JDKの内部APIを呼んでいるか検査する
$ jdeps --jdk-internals lib/org.tweetsum.jar
$

何も表示されなければ、内部APIは使用していません。

あるJARファイルが依存するモジュールまたはJARファイルを調べる
$ jdeps -s -classpath lib/jackson-core-2.6.6.jar:lib/jackson-databaind-2.6.6.jar:lib/jackson-annotations-2.6.6.jar lib/org.tweetsum.jar
org.tweetsum.jar -> lib/jackson-annotations-2.6.6.jar
org.tweetsum.jar -> lib/jackson-core-2.6.6.jar
org.tweetsum.jar -> lib/jackson-databind-2.6.6.jar
org.tweetsum.jar -> java.base
org.tweetsum.jar -> java.sql