13 votes

Comment injecter la déclaration d'un module dans un JAR ?

Supposons que j'ai une bibliothèque lib.jar dont je n'ai pas le code source (ou qui est écrit dans un langage non-Java qui ne connaît pas encore les modules). lib.jar n'a pas module-info.class et je ne veux pas l'utiliser comme un module automatique, donc je voudrais injecter module-info.class en elle.

Je génère d'abord module-info.java avec la commande suivante :

jdeps --generate-module-info . lib.jar

Supposons que cela génère quelque chose comme ça :

module lib {
    exports package1;
    exports package2;
}

J'essaie ensuite de le compiler mais javac échoue car les paquets package1 y package2 n'existent pas :

> javac module-info.java
module-info.java:4: error: package is empty or does not exist: package1

Bien sûr, je peux créer des répertoires package1 y package2 avec des classes fictives, mais existe-t-il une meilleure approche ?

14voto

orionll Points 1045

Oui, c'est possible avec le --patch-module option. Cette option est le plus souvent utilisée au moment de l'exécution, mais elle fonctionne également au moment de la compilation :

javac --patch-module <module name>=<path to jar> module-info.java

5voto

nullpointer Points 1135

Alternativement, pour compiler le module-info.java généré, vous devez également extraire le contenu du JAR dans un répertoire.

Ensuite, compilez le module-info.java avec le répertoire de sortie (-d) défini sur le répertoire où vous avez extrait le contenu.

_Crédits : - Alan_

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X