Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Java9 and Project Jigsaw

10.566 visualizaciones

Publicado el

#渋谷java

Publicado en: Software
  • Sé el primero en comentar

Java9 and Project Jigsaw

  1. 1. Java9 and Project Jigsaw #渋谷java @takezoen BizReach, Inc
  2. 2. Java9 ● 2017年3月リリース予定 ● 目玉機能:Project Jigsaw
  3. 3. Project Jigsawとは? ● モジュール管理のための仕組み ○ 複雑化しがちな依存関係、同一ライブラリのバージョン衝 突といったクラスパス問題(Jar Hell)を解決 ● JDK自体もモジュール化される ○ というか元々JDKのモジュール化が目的だった ○ 必要なモジュールだけでJDKのサブセットを構成可能 ○ 組み込み機器等での利用が想定される
  4. 4. 従来との違い ● 従来のクラスパスを置き換える ○ 互換性のためクラスパスとの併用も可能 ○ Jigsawのモジュールシステムからクラスをロードできない 場合はクラスパスから読み込む ● Mavenの依存ライブラリ管理機能との違い ○ 依存関係だけでなく可視性も定義できる ○ Mavenはビルド時のモジュールシステムだがJigsawは実 行時もサポートする
  5. 5. 延期に次ぐ延期 ● 2008年 ○ Project Jigsaw開始(Sun時代) ● 2010年 ○ Java7のリリースを優先するためLambdaと共にJava8に 先送り ● 2012年 ○ Java8のリリースを優先するためJava9に先送り ● 2015年 ○ Jigsawを入れるためにJava9のリリースを半年延期
  6. 6. モジュールの例 Appモジュール Utilモジュール
  7. 7. モジュールの例 クラスパスルートにmodule- info.javaを作成
  8. 8. module-info.javaの内容 // Utilモジュール module Util { exports sample.util; } // Appモジュール module App { requires Util; } このモジュールにはUtilモジュールが必要 であることを宣言 sample.utilパッケージを他のモジュール から使えるようにエクスポート
  9. 9. # マルチモジュールプロジェクトのコンパイル javac -d build -modulesourcepath src $(find src -name "*. java") コンパイル
  10. 10. jarの作成と実行 # Jigsaw対応のjarを作成 jar --create --file mlib/Util@1.0.jar --module-version 1.0 - C build/Util . # Mainクラスを指定 jar --create --file mlib/App@1.0.jar --module-version 1.0 -- main-class sample.app.Main -C build/App . # 実行 java -mp mlib -m App
  11. 11. パッケージング # パッケージング jlink --modulepath $JAVA_HOME/jmods:mlib --addmods App -- output app 実行ファイル
  12. 12. module-info.javaに書ける内容 ● exports ○ 他のモジュールに公開するパッケージを宣言する ● requires ○ このモジュールに必要なモジュールを宣言する ● uses、provides ○ ServiceLoaderでロード可能なサービスを宣言する
  13. 13. exports ● 他のモジュールに公開するパッケージを指定 ● 特定のモジュールにのみエクスポートすることも 可能 module Util { exports sample.util; exports sample.util to App; }
  14. 14. requires ● 必要なモジュールを宣言 ● publicをつけることで再エクスポート可能 module App { requires Storage; requires public Util; }
  15. 15. uses, provides ● ServiceLoaderでロード可能なサービスを提供 する // こんな感じでロードできるやつ ServiceLoader<Storage> loader = ServiceLoader.load(Storage.class); Iterator<Storage> ite = loader.iterator();
  16. 16. uses, provides module Storage { exports sample.storage; uses sample.storage.Storage } module S3Storage { requires Storage; provides sample.storage.Storage with sample.storage.s3.S3Storage; } Storageの実装を要求 Storageの実装として S3Storageを提供
  17. 17. JDKのパッケージもモジュール化されている ● java.base ● java.logging ● java.xml ● java.sql ● java.desktop ● など
  18. 18. 依存関係を見てみる $ jdeps -module mlib/Util@1.0.jar Util@1.0.jar -> java.base Util (Util@1.0.jar) -> sample.util Util@1.0.jar sample.util (Util@1.0.jar) -> java.io java.base -> java.lang java.base -> java.util java.base
  19. 19. 注意事項 ● エクステンションディレクトリが廃止されるため、そ れを利用したハックができなくなる ● ビルドツール、IDEやミドルウェアなど周辺環境の 対応も必要
  20. 20. 試してみよう ● JDK9 Early Access with Project Jigsaw ○ https://jdk9.java.net/jigsaw/ ● NetBeansのJigsawサポート ○ http://wiki.netbeans.org/JigsawSupport

×