Java 9および10で異なるオペレーティングシステム用のディストリビューションを作成する

この記事では、標準のJava 9および10ツールを使用して、 WindowsmacOS 、およびLinux用の本格的なディストリビューションを構築する方法について説明しています。

モジュール性ではなく、異なるオペレーティングシステム用のディストリビューション作成の機能に焦点を当て、ディストリビューションのサイズを縮小することに関する以前に公開された記事を補足します。

Java 9以降に発生した変更リストされます。 ビルドスクリプトによって実行される一連の手順について説明し、動作の変更と設定が可能な場所を示します。 Java 9で登場した機能とエラーを克服するために、ストーリーはハッピーエンドで表示されます



プロローグ


Javaプログラミング言語で記述されたデスクトップアプリケーションには、依然として存在する権利があります。 最も顕著な例はIntelliJ IDEAで 、これは異なるオペレーティングシステム用のインストール用ディストリビューションです。

JDKには、Javaアプリケーション配布キットをコンパイル、デジタル署名、および構築するためのJava Packagerコマンドラインユーティリティが含まれています 。 このユーティリティは、 JDK 7 Update 6で初めて登場しました。 コマンドラインで使用することに加えて、その機能はAntのタスクとして使用できます。 ドキュメントでは、それらはJavaFX Ant Tasksと呼ばれます

記事を書くときに使用された:


プロジェクトはGitHubにあります 。 配布のコンパイルとアセンブリは、 Mavenを使用して実行されます。 サンプルプロジェクトには、3つの部分( Maven用語のモジュール)が含まれています。


配布ビルド


この表には、実行の順に分布を形成する段階がリストされています。 これらの段階は、配布の動作、外観、または構成を変更する必要性または要望が発生する可能性のある太字で特に強調表示されています
番号p / pMavenモジュールMavenプラグインMavenライフサイクルフェーズステージ
1マルチプラットフォーム配布リソースmaven-resources-pluginプロセスリソース.issファイル( Windowsの場合 )および.plistmacOSの場合 )の文字列値の置換
2マルチプラットフォーム配布クライアントmaven-dependency-plugin生成ソースマニフェストの依存関係のリストを作成する
3build-helper-maven-plugin生成ソースマニフェストの依存関係のリストでセパレーターを置き換える
4maven-compiler-pluginコンパイルするコードのコンパイル
5maven-jar-pluginパッケージ.jarファイルの作成
6maven-dependency-pluginパッケージ配布のための依存関係のコピー
7maven-resources-pluginパッケージ配布用の追加ファイルをコピーする
8maven-antrun-pluginパッケージ
  1. グラフィックファイルと構成ファイルを使用してディストリビューションを構築する
  2. JREイメージの作成
  3. 特定のオペレーティングシステム用のディストリビューションを構築する

9maven-assembly-pluginパッケージLinux用の.tar.gz配布ファイルの生成( Linuxで実行している場合のみ)
10マルチプラットフォーム配布ディストリビューションmaven-assembly-pluginパッケージ
  1. .batWindowsの場合.shmacOSおよびLinuxの場合 )ファイルおよびライセンスの文字列値の置換
  2. ユニバーサル.zipディストリビューションの形成( JREなし)


macOSLinuxでディストリビューションを作成するには、 JDKMavenのみが必要です。 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 

拡張子exeWindowsの場合 )、 dmgmacOSの場合 )で作成されたディストリビューションのファイルは、ディレクトリmultiplatform-distribution-client/target/deploy/nativeにあり、拡張子tar.gzLinuxの場合 )-ディレクトリ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でのみ発生しました。 この問題を克服することは探偵小説全体に変わり、記事の公開を延期するために長い間伸ばすことを余儀なくされました。

イベントのクロニクル:

  1. OpenJFXリポジトリが複製され 、エラーが見つかりました。
  2. 同じ症状の説明がある既存のJDK-8179033が発見されました。
  3. ちょっとしたアドバイス(ありがとう)について、 openjfx-devグループに手紙を1、2回書き、エラーを修正するために必要な変更の提案と、その正確性を確認する方法についてのアドバイスを添えました。
  4. JDK-8179033のパフォーマーとの通信 -私は、Viktor Drozdovの友好的な態度と忍耐に感謝します。
  5. バグは修正され、バグはJava 10の予備バージョンの次のビルド-jdk-10-ea + 36に入りました
  6. コマンドラインから起動された配布ビルドは、正常に実行され始めました。
  7. IntelliJ IDEASDKjdk-10-ea + 36を追加しようとすると、(以前のビルドとは異なり)エラーがIDEA-183920を作成しました
  8. IDEA-183920コメンテーターは、 JDKの追加エラーの理由を示しました。このJDKアセンブリでは、識別の成功に必要なjavahユーティリティが含まれていました。
  9. JDK 10の識別エラーが修正されたIntelliJ IDEA 2017.3.2出力
  10. 配布キットの構築も開発環境から可能になりました。

サンプルのカスタマイズ


  1. プロジェクトのMavenモジュールの名前を変更し、名前のmultiplatform -distributionプレフィックスを別のものに置き換えます。
  2. モジュールmultiplatform-distribution-distribにあるファイルmultiplatform-distribution.batおよびmultiplatform-distribution.shの名前を変更します。
  3. pom.xmlファイルで編集します。

    • 名前を変更したMavenモジュールの名前。
    • 名前を変更したMavenモジュールに対応するディレクトリ名。
  4. assembly.xmlファイルで編集します。
    • 名前を変更したMavenモジュールの名前。
    • 変更されたmultiplatform-distribution.batおよびmultiplatform-distribution.shファイル名への参照。
  5. ルートpom.xmlファイルのpom.xml値を<app。*>という名前で変更します

    • アプリケーションのフルネーム。
    • アプリケーションの短い名前。
    • 年(-a)著作権;
    • ファイル名のアプリケーションコード。
    • デフォルトのアプリケーションパッケージ
    • アプリケーションを実行するクラスの名前。
  6. multiplatform-distribution-clientモジュールに独自のコードを追加します。
  7. readme.txt -distribution-clientモジュールのlicense.txtおよびreadme.txt内容を変更します。
  8. multiplatform-distribution-resourcesモジュールで画像ファイルの内容と名前を変更します。

結論



JEP 311が最近登場しました。JavaPackagerの新しいAPICLI (コマンドラインインターフェイス)を作成するJava Packager APIとCLIJEPは現在拒否されていますが、以前はJDK 10およびJDK 11で変更を行う予定でした。 活動の再開に伴い、この記事は近い将来に継続される可能性があります。

次回の3月4日( ノボシビルスクでのJBreak 2018 )および4月6-7日(モスクワでのJPoint 2018 )カンファレンスでは、 Java 9およびJavaの将来のバージョンに関する関連トピックに関するレポートをご覧いただけます

Source: https://habr.com/ru/post/J340248/


All Articles