web-dev-qa-db-fra.com

Pourquoi Java 9 a-t-il introduit le format de fichier JMOD?

Java 9 propose trois méthodes pour empaqueter le code compilé dans des fichiers:

  • JAR
  • JMOD
  • JIMAGE

JIMAGE est optimisé pour la vitesse et l'espace et utilisé par la JVM au moment de l'exécution, il est donc logique pourquoi JIMAGE a été introduit. Les fichiers JIMAGE ne sont pas censés être publiés dans maven repos ni utilisés lors de la compilation ou de la liaison.

Les documents affirment que JMOD peut stocker du code natif et d'autres choses qui ne peuvent pas être stockées par les fichiers JAR et que les développeurs peuvent créer et distribuer leurs propres fichiers JMOD. Le JDK est livré avec jmods/ répertoire contenant tous les modules du JDK dont dépendent les utilisateurs.

Questions:

  • Pourquoi Java 9 a-t-il introduit le format de fichier JMOD?
  • Un auteur de bibliothèque doit-il distribuer un fichier JMOD ou un fichier JAR ou les deux?
  • Les fichiers jmod doivent-ils être publiés dans maven repos?
33
ams

Voici quelques citations de JEP 261: Module System , qui contient une section sur les fichiers JMOD.

Pourquoi?

De JEP 261 :

Le nouveau format JMOD va au-delà des fichiers JAR pour inclure du code natif, des fichiers de configuration et d'autres types de données qui ne rentrent pas naturellement, voire pas du tout, dans les fichiers JAR.

et

Le format final des fichiers JMOD est un problème ouvert, mais pour l'instant il est basé sur des fichiers Zip.

Un développeur devrait-il publier des fichiers JMOD?

Notez que les fichiers JMOD semblent être un moyen d'incorporer du code natif (entre autres) au moment de la compilation et de la liaison. De JEP 261 :

Les fichiers JMOD peuvent être utilisés au moment de la compilation et de la liaison, mais pas au moment de l'exécution.

(Pour être honnête, je ne sais pas comment le code natif est publié avant JDK 9.) Pour la grande majorité des développeurs (sans bibliothèques natives ou autres cas d'angle), nous publierons simplement des pots modulaires.

10
Michael Easter