web-dev-qa-db-fra.com

Comment utiliser une bibliothèque tierce dans le module Java9?

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?

15
igr

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;
}
16
ZhekaKozlov

Juste pour faire des étapes simples, pour utiliser un pot tiers (par exemple log4j-api-2.9.1.jar ci-dessous) dans votre module: -

  1. 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

  2. Dans votre module-info.Java, déclarez un requires à ce nom de module comme: -

    module your.module {
        requires log4j.api;
    }
    

    C'est tout.

8
Naman