モジュール性ではなく、異なるオペレーティングシステム用のディストリビューション作成の機能に焦点を当て、ディストリビューションのサイズを縮小することに関する以前に公開された記事を補足します。
Java 9以降に発生した変更がリストされます。 ビルドスクリプトによって実行される一連の手順について説明し、動作の変更と設定が可能な場所を示します。 Java 9で登場した機能とエラーを克服するために、ストーリーはハッピーエンドで表示されます 。
![](https://habrastorage.org/webt/bs/x0/db/bsx0db6hdkcbuxdoyvyem-bl93a.jpeg)
プロローグ
Javaプログラミング言語で記述されたデスクトップアプリケーションには、依然として存在する権利があります。 最も顕著な例はIntelliJ IDEAで 、これは異なるオペレーティングシステム用のインストール用ディストリビューションです。
JDKには、Javaアプリケーション配布キットをコンパイル、デジタル署名、および構築するためのJava Packagerコマンドラインユーティリティが含まれています 。 このユーティリティは、 JDK 7 Update 6で初めて登場しました。 コマンドラインで使用することに加えて、その機能はAntのタスクとして使用できます。 ドキュメントでは、それらはJavaFX Ant Tasksと呼ばれます 。
記事を書くときに使用された:
- オペレーティングシステムWindows 10 、 macOS High Sierra 10.13 、 Ubuntu 16.04.3 LTS ;
- 3つすべてのオペレーティングシステム用のJDK 9およびJDK 10早期アクセスビルド 。
- Apache Maven 3.5.0 ;
- Inno Setup 5.5.9 ;
- Java 9およびJava 10をサポートするIDE (例: IntelliJ IDEA 2017.3.2以降)。
プロジェクトはGitHubにあります 。 配布のコンパイルとアセンブリは、 Mavenを使用して実行されます。 サンプルプロジェクトには、3つの部分( Maven用語のモジュール)が含まれています。
- アプリケーションコード付きのマルチプラットフォーム配布クライアント 。
- 補助配布ファイルを含むmultiplatform-distribution-distrib ;
- インストーラー用のリソースを備えたmultiplatform-distribution-resources 。
配布ビルド
この表には、実行の順に分布を形成する段階がリストされています。 これらの段階は、配布の動作、外観、または構成を変更する必要性または要望が発生する可能性のある太字で特に強調表示されています 。
番号p / p | Mavenモジュール | Mavenプラグイン | Mavenライフサイクルフェーズ | ステージ |
---|---|---|---|---|
1 | マルチプラットフォーム配布リソース | maven-resources-plugin | プロセスリソース | .iss
ファイル( Windowsの場合 )および .plist
( macOSの場合 )の文字列値の置換 |
2 | マルチプラットフォーム配布クライアント | maven-dependency-plugin | 生成ソース | マニフェストの依存関係のリストを作成する |
3 | build-helper-maven-plugin | 生成ソース | マニフェストの依存関係のリストでセパレーターを置き換える | |
4 | maven-compiler-plugin | コンパイルする | コードのコンパイル | |
5 | maven-jar-plugin | パッケージ | .jar
ファイルの作成 | |
6 | maven-dependency-plugin | パッケージ | 配布のための依存関係のコピー | |
7 | maven-resources-plugin | パッケージ | 配布用の追加ファイルをコピーする | |
8 | maven-antrun-plugin | パッケージ |
| |
9 | maven-assembly-plugin | パッケージ | Linux用の.tar.gz
配布ファイルの生成( Linuxで実行している場合のみ) | |
10 | マルチプラットフォーム配布ディストリビューション | maven-assembly-plugin | パッケージ |
|
macOSとLinuxでディストリビューションを作成するには、 JDKとMavenのみが必要です。 Windowsでは、最初にInno SetupまたはWiX Toolsetをインストールする必要があります 。 さらに、 Inno Setupが使用されていることがわかります 。
WindowsおよびmacOSでのコンパイルとビルド配布の開始:
mvn clean package -P native-deploy
Linuxで配布パッケージのコンパイルとアセンブリを開始します(追加の
tar.gz
アーカイブファイルが作成されます)。
mvn clean package -P native-deploy,tar-gz
拡張子
exe
( Windowsの場合 )、
dmg
( macOSの場合 )で作成されたディストリビューションのファイルは、ディレクトリ
multiplatform-distribution-client/target/deploy/native
にあり、拡張子
tar.gz
( Linuxの場合 )-ディレクトリ
multiplatform-distribution-client/target
。
すべてのオペレーティングシステムに適し、 JREを含まない
zip
拡張子を持つユニバーサルディストリビュー
multiplatform-distribution-distrib/target
作成されます。
Java 9および10の機能
待望のJava 9のリリースは、以前のバージョンのJavaで正常に機能していたディストリビューションビルドスクリプトに破壊的な影響を与えました。
まず 、 JREイメージの作成と配布の配布を実行する<fx:deploy>タスクは、 使用するディレクトリの構造をわずかに変更しました 。 これに対応するために、ビルドスクリプトが変更されました。
第二に 、ディストリビューションインストーラーを作成するときに、 テキストおよびグラフィックリソースの読み込みが停止した場合は 、 JDK-8186683を参照してください。 Java 9でディストリビューションを構築するときにクラスパスからリソースをロードできないことは、新しいdropinResourcesRoot引数を追加することで補償されます。 引数値としてリソースディレクトリへのパスを指定することをお勧めします。
pom.xml
ファイルのタスクの説明では
pom.xml
ようになります。
![](https://habrastorage.org/webt/59/f0/6a/59f06afec050a962312316.png)
第三に 、 Java 9の実装のエラーにより、ファイルにサブディレクトリを含める機能(たとえば、プログラム依存ライブラリの
lib
サブディレクトリ) がディストリビューションで失われました 。 このエラーは、 WindowsおよびmacOSでのみ発生しました。 この問題を克服することは探偵小説全体に変わり、記事の公開を延期するために長い間伸ばすことを余儀なくされました。
イベントのクロニクル:
- OpenJFXリポジトリが複製され 、エラーが見つかりました。
- 同じ症状の説明がある既存のJDK-8179033が発見されました。
- ちょっとしたアドバイス(ありがとう)について、 openjfx-devグループに手紙を1、2回書き、エラーを修正するために必要な変更の提案と、その正確性を確認する方法についてのアドバイスを添えました。
- JDK-8179033のパフォーマーとの通信 -私は、Viktor Drozdovの友好的な態度と忍耐に感謝します。
- バグは修正され、バグはJava 10の予備バージョンの次のビルド-jdk-10-ea + 36に入りました 。
- コマンドラインから起動された配布ビルドは、正常に実行され始めました。
- IntelliJ IDEAのSDKにjdk-10-ea + 36を追加しようとすると、(以前のビルドとは異なり)エラーがIDEA-183920を作成しました 。
- IDEA-183920コメンテーターは、 JDKの追加エラーの理由を示しました。このJDKアセンブリでは、識別の成功に必要なjavahユーティリティが含まれていました。
- JDK 10の識別エラーが修正されたIntelliJ IDEA 2017.3.2出力 。
- 配布キットの構築も開発環境から可能になりました。
サンプルのカスタマイズ
- プロジェクトのMavenモジュールの名前を変更し、名前のmultiplatform -distributionプレフィックスを別のものに置き換えます。
- モジュールmultiplatform-distribution-distribにあるファイル
multiplatform-distribution.bat
およびmultiplatform-distribution.shの名前を変更します。 -
pom.xml
ファイルで編集します。
- 名前を変更したMavenモジュールの名前。
- 名前を変更したMavenモジュールに対応するディレクトリ名。
-
assembly.xml
ファイルで編集します。
- 名前を変更したMavenモジュールの名前。
- 変更された
multiplatform-distribution.bat
およびmultiplatform-distribution.sh
ファイル名への参照。
- ルート
pom.xml
ファイルのpom.xml
値を<app。*>という名前で変更します。
- アプリケーションのフルネーム。
- アプリケーションの短い名前。
- 年(-a)著作権;
- ファイル名のアプリケーションコード。
- デフォルトのアプリケーションパッケージ
- アプリケーションを実行するクラスの名前。
- multiplatform-distribution-clientモジュールに独自のコードを追加します。
-
readme.txt
-distribution-clientモジュールのlicense.txt
およびreadme.txt
内容を変更します。 - multiplatform-distribution-resourcesモジュールで画像ファイルの内容と名前を変更します。
結論
- 標準のJDK 9および10ツールを使用して、さまざまなオペレーティングシステム用のディストリビューションを構築できます。
- 構成、動作、および配布タイプのカスタマイズは比較的簡単です。
- Java 9は、この記事を書くときに考慮されたいくつかの機能を導入しました。
JEP 311が最近登場しました。JavaPackagerの新しいAPIとCLI (コマンドラインインターフェイス)を作成するJava Packager APIとCLI 。 JEPは現在拒否されていますが、以前はJDK 10およびJDK 11で変更を行う予定でした。 活動の再開に伴い、この記事は近い将来に継続される可能性があります。
次回の3月4日( ノボシビルスクでのJBreak 2018 )および4月6-7日(モスクワでのJPoint 2018 )カンファレンスでは、 Java 9およびJavaの将来のバージョンに関する関連トピックに関するレポートをご覧いただけます 。
- JDK 9、ミッション達成:Javaの次は何ですか? (サイモン・リッター)
- Java 9モジュールへの移行 (Sander Mak)
- コードをJava 9モジュールにリファクタリングする (Rabea Gransberger)
- JDK 9上のJavaFX (Gerrit Grunwald)