web-dev-qa-db-ja.com

なぜJava 9はJMODファイル形式を導入したのですか?

Java 9には、コンパイルされたコードをファイルにパッケージ化する3つの方法があります。

  • JAR
  • JMOD
  • ジマージュ

JIMAGEは速度とスペースが最適化され、実行時にJVMによって使用されるため、JIMAGEが導入された理由は理にかなっています。 JIMAGEファイルは、Mavenリポジトリに公開されたり、コンパイル時またはリンク時に使用されることは想定されていません。

ドキュメントでは、JMODはネイティブコードや、JARファイルでは保存できないその他のものを保存でき、開発者は独自のJMODファイルを作成して配布できると主張しています。 JDKには、ユーザーが依存するJDKのすべてのモジュールを含むjmods/ディレクトリが付属しています。

質問:

  • なぜJava 9はJMODファイル形式を導入したのですか?
  • ライブラリ作成者は、JMODファイルまたはJARファイル、あるいはその両方を配布する必要がありますか?
  • JmodファイルをMavenリポジトリに公開する必要がありますか?
33
ams

JEP 261:Module System からの引用です。JMODファイルに関するセクションが含まれています。

なぜ?

JEP 261 から:

新しいJMOD形式は、JARファイルにとどまらず、ネイティブコード、構成ファイル、および自然にJARファイルに収まらない場合もある他の種類のデータを含みます。

そして

JMODファイルの最終形式は未解決の問題ですが、現時点ではZipファイルに基づいています。

開発者はJMODファイルを公開する必要がありますか?

JMODファイルは、コンパイル時およびリンク時にネイティブコードを(特に)組み込む方法のように見えることに注意してください。 JEP 261 から:

JMODファイルは、コンパイル時およびリンク時に使用できますが、実行時には使用できません。

(正直なところ、JDK 9より前のネイティブコードがどのように公開されるのかわかりません。)大部分の開発者(ネイティブライブラリまたは他のコーナーケースなし)については、単にモジュラーjarを公開します。

10
Michael Easter