Javaのアーティファクトがより良いものに:jpackageはJava 16からプロダクションレディです

JDK (Java开发工具包)14では自己完結型Javaアプリケーションをパッケージングするものとして,Javaツールキットにインキュベーション機能が追加されました。新しくリリスされたJava 16ではこの機能が製品化されています。
異なるプラットフォーム用のコンパイルについて考えると震えるという方,私にはその気持ちがよくわかります。Javaの約束の1つであるWORA(Write Once, Run Anywhere)原則はプラットフォームの独立性に革命をもたらしたものの、もう1つのステップである「どこにでもデプロイできる」ことには至りませんでした。個人的にWORADAは素晴らしいと思いますが、Dockerの登場以前「自分のマシンでは動くのに」問題をなくすのは自分のマシンを出荷するのと同じくらい面倒なことだと思われていたのではないでしょうか。
つまりあなたはクラスを書き,jarファイルを作り,正しいJVM(またはJDK)とすべての依存関係を必要とし,動かすために特殊な作業を行ってきました。この知識が開発サ▪▪▪▪ロから運用サ▪▪▪▪▪ロに一貫してそのまま送り届けられることは可能なのでしょうか?
“自分のマシンを出荷する”コンテナ革命
コンテナですべてが変わりました。過去数年間“Javaアプリケーションのデプロイに非常に苦労している”という苦情に対して,“少なくともJavaだとすべてのプラットフォームで動作するけど,他はそれさえもできない”と答えていましたが,码头工人とコンテナの台頭により”少なくともマルチプラットフォームである”という議論は水の泡となってしまいました。マルチプラットフォームのサポートは(ターゲットプラットフォームを出荷するので)突然それほど重要ではなくなりましたが,アプリケーション全体を含むパッケージを持つことが勝者となったのです。
, jpackage .
码头工人中311 (Java API包装机和CLI)の最初のリリースからわずか4年,ついに日の目を見ました。そのア@ @デアは古くて放置されていたjavapackagerル(その目的は“蚁タスクの代替として使用されること”でした甲骨文の公式ドキュメントからの引用です,冗談ではありません!)をクリーンアップし,文書化し,適切なAPIを提供し,Java開発者が適切なインストーラを作成できるようにすることでした。そして,JEPの343と392:包装工具に置き換えられました。パッケジングルはJava 16のリリスできれいに書き直され,素晴らしいものになりました。ご覧ください。
$ jpackage create-installer——runtime-installer \——name——output outputdir
これですべて(アプリ,依存ファイル,JRE,厨房水槽)を含むインストーラー(msi / .exe1、dmg。deb / rpm)を作成したことになります。
すべて?それは言い過ぎでは?
本当にそうなのです。しかし,実際にはすべてをパッケ,ジングする必要はありません。以下のようなコマンドで自分のアプリケションだけの実行ファルを作成します。
$ jpackage——name myapp——input lib——main-jar main.jar \——main类myapp。主要
このパッケ,ジにはmyappと呼ばれるアプリケ,ションのランチャ,が含まれています。アプリケーションを起動するために,ランチャーは入力ディレクトリからコピーされたすべてのJARファイルをJVMのクラスパスに配置します。
jreはどこへ行った?
でも…jreを除外したことで,目的を達成できなかったのでは?はい,そうなのです。jreを含むけれどもすべてではない,という間を取ったやり方を見けましょう。jlinkコマンドを使って,本当に必要なモジュ,ルだけを含むjreのサブセットを作ることができます。
$ jlink—添加模块java.base,java。SQL——输出smalljre
これで,smalljreというカスタムの(そして小さな)jreができました。それを使ってンストラを作ってみましょう。
$ jpackage——name myapp——input lib——main-jar main.jar \——runtime-image smalljre
jpackageってかっこいいですよね?その通りです。ではDockerの代わりになるのでしょうか?いえ,そうではありません。それなら何になるのでしょう?お答えしましょう,私たはスタンドアロンのJavaアプリケションを持,どこでも実行することができる(Run Anywhere)のです。
Javaパッケ,ジをどこへでも
さて,素晴らしいパッケ,ジができました。次はどうしましょう?それは,このパッケ,ジが何であるかによります。ここでは,いくかのオプションを紹介します。
- ダウンロ,ド可能なデスクトップアプリケ,ションの場合。クラウドでの配布サ,ビスが必要です。JFrog平台はまさにそれを実現する無料のクラウドアカウントを提供しています。Javaパッケージをジェネリックリポジトリにデプロイすることで、それを必要な人が自分のデバイスにダウンロード出来るようになります。
- JFrog平台はDebianおよびrpmパッケージのリポジトリタイプにも対応しているので,DebianやrpmのJavaパッケージをネイティブにホストし,提供することができます。
- 配布の体験をさらに向上させたい場合,上位のJFrog平台のサブスクリプションレベルにおいて,世界中どこでもより快適なダウンロード速度を提供するCDN(内容分发网络)のサポ,トが含まれています。
- Dockerメ,ジの一部である場合。セルフホスティングのために無料のJFrog货柜注册处を手に入れるか,JFrog平台で無料のクラウドアカウントを開設してください。どちらの場合も,あなたの码头工人イメージのための無料の码头工人レジストリと,それらイメージのコンテンツ,つまり私たちのJavaパッケージのためのジェネリックリポジトリが使えるようになります。次に,シンプルな添加命令で,1つのファイル(Javaパッケージ)をイメージにコピーし,Dockerfileをシンプルに整頓できます。
Java 16 -アプリケ,ションの簡略化
すべてのjarを集め,任意のJREを追加し,簡単なコマンドですべてをパッケージングすると,Java初心者の”この混乱から一体どうやってアプリケーションを作ればいいのか”という疑問が現実のものとなります。これはjpackageのおかげです。JFrog平台を使ってどんなターゲットやエンドユーザーにもアクセスできるようにすれば,最強の組み合わせになります。
Java 16のリリースとJavaコミュニティに与える影響については,以下のブログ記事をご覧ください。
Java 16提交到Git和GitHub:个人反思
Java®はOracleおよびその関連会社の商標です。
