J'ai un module Java9 qui utilise une bibliothèque tierce qui n'est pas un module Java9, juste un simple pot utilitaire.
Cependant, le compilateur se plaint de ne pas trouver de package à partir de mon utilitaire.
Que dois-je faire dans module-info.Java
pour activer l'utilisation de ma bibliothèque tierce?
Vous pouvez utiliser votre bibliothèque comme module automatique. Un module automatique est un module qui n'a pas de descripteur de module (c'est-à-dire module-info.class
). Mais quel nom devez-vous utiliser pour faire référence à ce module? Le nom du module automatique est dérivé du nom du JAR (sauf si ce JAR contient un Automatic-Module-Name
attribut). La règle complète est assez longue (voir Javadoc pour ModuleFinder.of
), donc pour simplifier, il vous suffit de supprimer la version de son nom, puis de remplacer tous les caractères non alphanumériques par des points (.
).
Par exemple, si vous souhaitez utiliser foo-bar-1.2.3-SNAPSHOT.jar
, vous devez ajouter la ligne suivante à module-info.Java
:
module <name> {
requires foo.bar;
}
Juste pour faire des étapes simples, pour utiliser un pot tiers (par exemple log4j-api-2.9.1.jar
ci-dessous) dans votre module: -
Exécutez la commande de descripteur de l'outil jar
jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
Cela vous fournirait une sortie similaire à
Aucun descripteur de module trouvé. Dérivé module automatique.
log4j.api@2.9.1 automatique
Dans votre module-info.Java
, déclarez un requires
à ce nom de module comme: -
module your.module {
requires log4j.api;
}
C'est tout.