2010-02-09 8 views
4

exécuté Disons que j'ai:
core.jar
client.jar (contient méthode principale) (utilise core.jar)
super_mega_client.jar (utilise core.jar, client. pot)Get-fichier manifeste du JAR

Pour exécuter mon programme j'utiliser « java -jar super_mega_client.jar »
Comment pourrais-je obtenir le fichier manifeste de ne rien savoir « super_mega_client.jar » au sujet de son nom et son contenu?
Je dois actualy créer un util dans core.jar qui travaillera avec le pot, exécuté avec "java jar *** pot"


OK, voici une bonne question:
Je main.jar avec méthode principale (permet de dire dans my.app.Main classe)
J'ai aussi fisrt.jar (avec certaines classes et ressources) et second.jar (avec quelques autres classes et ressources). Les deux n'ont pas de classes principales, les deux ont "main.jar" dans CLASSPATH, les deux ont la propriété Main-Class définie comme "my.app.Main".
Je peux exécuter mon application en exécutant « java jar first.jar » ou « java jar second.jar »
Dans ma méthode my.app.Main.main(String[] args) (contenue dans main.jar) Je veux savoir la nom du pot exécuté (je veux obtenir soit "first.jar" ou "second.jar")
Comment pourrais-je le faire?

+0

Voir [this] (http://stackoverflow.com/questions/2198525/can-values-defined-in-manifest-mf-be-accessed-programmatically) question. – er4z0r

+0

Je ne connais ni nom-jar, ni nom de classe. Je sais seulement que jar a été utilisé dans la commande "java -jar * .jar". –

+0

+1. En utilisant la réponse citée, vous pouvez rechercher le manifeste de chaque JAR potentiel, par ex.'find/path/to/jars -name '* jar' | xargs manifeste – trashgod

Répondre

0

En tout pot qui déclare sa classe principale, l'emplacement et le nom est fixé par la norme à META-INF/MANIFEST.MF

Vous pouvez récupérer le fichier manifeste en utilisant la commande jar qui vient avec le SDK Java (tout outil de zip que vous peut courir à partir de la commande pourrait suffire aussi) en cours d'exécution:

jar -xvf anyjar.jar META-INF/MANIFEST.MF 

cela va créer le répertoire META-INF et mettre le fichier manifeste en elle. Vous pouvez omettre le -v si vous voulez une sortie moins verbeuse.

0

Pas tout à fait sûr que je comprends ce que vous avez besoin, mais consultez cet article (par exemple)

http://java.sun.com/j2se/1.5.0/docs/guide/lang/resources.html

Vous demandez au classLoader (donc utiliser une classe que vous avez déjà chargée et demande ce classloader il utilisé est probablement assez bon) pour charger la ressource pour vous.

0

Vous pouvez utiliser l'option -verbose de la commande java pour afficher les noms de toutes les classes chargées.