2017-09-20 7 views
3

Par exemple j'ai le fichier jar somefile-0.1.jar qui contient le module JPMS. En outre, j'ai une référence Module somemodule à ce module.Comment obtenir le nom de fichier jar par Module en Java 9?

Comment obtenir le nom du fichier jar par Module (en utilisant la référence somemodule)? J'ai examiné l'API Module, mais je n'ai pas trouvé le moyen de le faire.

+0

Pourriez-vous clarifier le 'somefile-0.1.jar' serait utilisé sur le chemin de la classe ou le chemin du module? – nullpointer

+0

@nullpointer Chemin du module. Mais bien sûr, ce serait bien que la solution prenne en charge les deux chemins. –

+0

Sur le chemin du module, 'module.getResourceAsStream (" module-info.class ")' aide-t-il? – nullpointer

Répondre

6

Il n'y a aucune garantie que le module a été chargé depuis un JAR modulaire. En tout cas, je pense que cela est proche de ce que vous cherchez:

Module m = ... 
ModuleLayer layer = m.getLayer(); 
if (layer != null) { 
    ModuleReference mref = layer.configuration() 
      .findModule(m.getName()) 
      .map(ResolvedModule::reference) 
      .orElseThrow(() -> new RuntimeException("should not happen")); 
} 
+0

quand la couche peut-elle être nulle? pourquoi une vérification nulle là? – nullpointer

+3

@nullpointer De la documentation du module # getLayer: "Renvoie la couche du module qui contient ce module ou null si ce module n'est pas dans une couche de module Une couche de module contient des modules nommés et donc cette méthode retourne toujours null lorsqu'elle est appelée Les modules dynamiques sont des modules nommés qui sont générés au moment de l'exécution, un module dynamique pouvant se trouver ou non dans un module. –