この記事では、標準の
Java 9および
10ツールを使用して、
Windows 、
macOS 、および
Linux用の本格的なディストリビューションを構築する方法について説明しています。
モジュール性ではなく、異なるオペレーティングシステム用のディストリビューション作成の機能に焦点を当て
、ディストリビューションのサイズを縮小することに関する以前に公開された記事を補足します。
Java 9以降に発生した変更
がリストされます。 ビルドスクリプトによって実行される一連の手順について説明し、動作の変更と設定が可能な場所を示します。
Java 9で登場した機能とエラーを克服するために、ストーリーはハッピーエンドで表示され
ます 。

プロローグ
Javaプログラミング
言語で記述されたデスクトップアプリケーションには、依然として存在する権利があります。 最も顕著な例は
IntelliJ IDEAで 、これは異なるオペレーティングシステム用のインストール用
ディストリビューションです。
JDKには、Javaアプリケーション配布キットをコンパイル、デジタル署名、および構築するための
Java Packagerコマンドラインユーティリティが含まれてい
ます 。 このユーティリティは、
JDK 7 Update 6で初めて登場しました。 コマンドラインで使用することに加えて、その機能は
Antのタスクとして使用できます。 ドキュメントでは、それらは
JavaFX Ant Tasksと呼ばれ
ます 。
記事を書くときに使用された:
プロジェクトは
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 | パッケージ | - グラフィックファイルと構成ファイルを使用してディストリビューションを構築する
- JREイメージの作成
- 特定のオペレーティングシステム用のディストリビューションを構築する
|
9 | maven-assembly-plugin | パッケージ | Linux用の.tar.gz 配布ファイルの生成( Linuxで実行している場合のみ) |
10 | マルチプラットフォーム配布ディストリビューション | maven-assembly-plugin | パッケージ | .bat ( Windowsの場合 ) .sh ( macOSおよびLinuxの場合 )ファイルおよびライセンスの文字列値の置換
- ユニバーサル
.zip ディストリビューションの形成( JREなし)
|
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
ようになります。
第三に 、
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の将来のバージョンに関する関連トピックに関するレポートをご覧いただけ
ます 。