Как мне проверить заказ MANIFEST.MF в банке? - PullRequest
7 голосов
/ 18 января 2011

Я столкнулся с интересной проблемой, которая является абсолютно новой для меня. Как я неожиданно обнаружил, спецификация Jar гласит, что, будучи включенными, META-INF и MANIFEST.MF должны быть первой и второй записями пакета *.jar, а не просто каталогом и файлом в архиве.

Я работаю с фреймворком Java, очень внимательно следя за этим требованием и не слишком многословно. Как проверить, что META-INF и MANIFEST.MF правильно упорядочены в банке?

UPDATE: Многие банки являются сторонними, и их много. Я не могу открыть эти банки в блокноте, Excel, Hexeditor, Photoshop или что-то другое, ища последовательности байтов. Мне нужен инструмент командной строки. Спасибо!

ОБНОВЛЕНИЕ 2: Вот причина, почему я задаю этот вопрос: http://www.mail-archive.com/dev@felix.apache.org/msg17097.html

Ответы [ 3 ]

5 голосов
/ 19 января 2011

Следующая команда будет перечислять содержимое JAR в следующем порядке:

jar tf foo.jar

Обратите внимание, что в спецификации JAR нет фактических требований для появления META-INF/MANIFEST.MF первым.Однако файлы JAR, созданные с помощью инструмента jar (поставляемого с JDK) do , сначала имеют манифест, и поэтому он стал соглашением.

2 голосов
/ 18 января 2011

Инструмент jar с JDK автоматически добавляет их в первую очередь, поэтому вам не нужно ничего делать.Если вы действительно хотите проверить, найдите шестнадцатеричный редактор и найдите строки 'META-INF' и 'MANIFEST.MF' перед любыми другими именами файлов.

1 голос
/ 25 августа 2014

Чтобы исправить сломанные банки:

$ mkdir foo
$ cd foo
$ jar xvf ../broken.jar
$ mv META-INF/MANIFEST.MF /tmp/mymanifest
$ jar cvfm fixed.jar /tmp/mymanifest .

SEE: MANIFEST.MF должен быть первым ресурсом в файле jar - вот как исправить поврежденные jar

...