Получить файл манифеста из выполненного JAR - PullRequest
4 голосов
/ 09 февраля 2010

Допустим, у меня есть:
core.jar
client.jar (содержит метод main) (использует core.jar)
super_mega_client.jar (использует core.jar, client.jar)

Для запуска моей программы я использую "java -jar super_mega_client.jar"
Как я могу получить файл манифеста из «super_mega_client.jar», ничего не зная о его имени и содержимом?
На самом деле мне нужно создать утилиту в core.jar, которая будет работать с jar, выполненным с помощью "java -jar ***. Jar"


Хорошо, вот правильный вопрос:
У меня есть main.jar с методом main (скажем, в my.app.Main class)
У меня также есть fisrt.jar (с некоторыми классами и ресурсами) и second.jar (с некоторыми другими классами и ресурсами). Оба не имеют основных классов, оба имеют " main.jar " в CLASSPATH, оба имеют свойство Main-Class, определенное как " my.app.Main ".
Я могу запустить свое приложение, выполнив « java -jar first.jar » или « java -jar second.jar »
В моем методе my.app.Main.main(String[] args) (содержится в main.jar ) я хочу знать имя выполненного jar (я хочу получить либо " first.jar ", либо "* 1036" * second.jar")
Как я мог это сделать?

Ответы [ 3 ]

0 голосов
/ 09 февраля 2010

Не совсем уверен, что я понимаю, что вам нужно здесь, но посмотрите эту статью (например)

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

Вы просите CLASSLOADER (поэтому используйте уже загруженный класс и запрашиваете, какой загрузчик классов, вероятно, достаточно хорош), чтобы загрузить ресурс для вас.

0 голосов
/ 09 февраля 2010

Вы можете использовать опцию -verbose команды java, чтобы увидеть имена всех загруженных классов.

0 голосов
/ 09 февраля 2010

В любом банке, который объявляет свой основной класс, местоположение и имя по стандарту фиксируются на META-INF/MANIFEST.MF

Вы можете получить файл манифеста с помощью команды jar, поставляемой с Java SDK (может также подойти любой zip-инструмент, который вы можете запустить из этой команды), запустив:

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

это создаст каталог META-INF и поместит в него файл манифеста. Вы можете не указывать -v, если хотите меньше подробного вывода.

...