2014-01-19 3 views
6

Мне нужно обновить манифест в моем файле jar, который я создаю (экспортирует) в Eclipse. Я попытался последовать за this объяснениями без успеха. Я не совсем уверен, что указать в командной строке. Веб-сайт Oracle не слишком ясен. Затем я нашел сообщение о SO, в котором говорится, чтобы извлечь файл manifest.mf из архива jar, обновить его и добавить его обратно в архив jar. Я тоже это пробовал и, похоже, работает, однако, во время выполнения, я получаю java.io.IOException: invalid manifest format. Каков правильный способ обновления manifest.mf, чтобы добавить новые атрибуты? Пример был бы наиболее полезным.Обновление файла манифеста jar. Java.io.IOException: недопустимый формат манифеста

ответ

2

Ссылки, предлагаемые Петром, были частично полезны. Тем не менее, я смог решить это более или менее путем проб и ошибок. Документы Oracle, объясняющие, как это сделать, требуют большой работы. У них нет хорошего примера того, как действовать. В любом случае, для тех, кто сталкивается с теми же проблемами, вот что я сделал. Я создал текстовый файл (например, «Manifest.txt») с помощью Notepad, который содержит атрибуты манифеста, которые я хотел добавить/обновить. При создании этого файла я обязательно добавил новый символ строки в последнюю строку, нажав клавишу на клавиатуре. Затем я создал файл bat DOS для фактической модификации. Вот как это выглядело ...

echo Updating manifest permissions... 
"C:\Program Files\Java\jdk1.7.0_25\bin\jar" -umf "c:\some folder\Manifest.txt" "C:\some folder\jartoupdate.jar" 

Порядка аргументов баночки, как они относятся к реальным путям, которые следуют в командной строке имеет важное значение. Ссылки из ответа Питера указали на эту часть.

0

Чтобы обновить манифест в файле jar, вы нашли ответ в документах oracle. Вот еще одно место, чтобы увидеть ответ. Предполагая, что вы прочитали доступ к каталогу, где установлена ​​JDK и документация была загружена с ним (легко загрузить документацию, это для SE7 http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html):

  1. перейти к [install_directory]/документов. Файл содержит index.html.
    >>>>, например. шахта для JDK 6 называется C: \ my_TOOLS \ Java_stuff \ jdk_1.6.0_20 \ Docs \ index.html

  2. Перетащите index.html на странице браузера.

  3. Эта страница показывает вам обзор документации JDK и содержит много ссылок на полезную информацию. JDK 6 В строке верхней строки строки Java Language щелкните JAR. Он переводит вас на страницу, суммирующую документацию (со ссылками) jartool.
    В разделе «Инструменты JAR» этой страницы нажмите ссылку ссылки на страницу для вашей платформы (возможно, вам нужна «справочная страница инструмента JAR для Windows»).

  4. Эта справочная страница инструмента JAR показывает подробную документацию для команды jar. Здесь вы увидите пример « jar umf Manifest.txt my_jar.jar». (Solaris/Linux не использует «-» перед аргументами, такими как «umf».


Я использовал его (на Linux), чтобы объединить 2 пользовательские файлы манифеста в манифест по умолчанию и положил его в банку. Я делаю это в двухэтапном процессе, но мне было бы интересно узнать одноэтапную команду для этого. (Используя два м, чтобы команда банки вызывает второй манифест перезаписать первый манифест - не слит.) (Помните, каждый файл манифест должен заканчиваться пустой строкой.)

Manifest.txt содержит «Имя:» и "Реализация-версии:"
Manifest.my_app.txt содержит "Main-Class:" и "Class-Path:"
по умолчанию манифест содержит "Manifest-Version:" и "Создано-By:"

jar cmf my_app.jar Manifest.txt my_main.class my_utils.class 
jar umf Manifest.my_app.txt my_app.jar 


После это, мой META-INF/MANIFEST.MF содержит все поля из всех 3 манифестаций. Я ожидал, что их присоединят друг к другу, но поля смешались. Может быть, кто-то может сказать, как их заказать или просто добавить. Это порядок, в котором они отображаются в моем текущем META-INF/MANIFEST.MF.

Manifest-Version: 1.0 
Implementation-Title: my_app 
Implementation-Version: 1.2.1 
Class-Path: ... 
Name: My App 
Created-By: 1.6.0_20 (Oracle Corporation) 
Main-Class: My_App 

Надеюсь, что часть этого полезна для вас.

+0

Вы знаете, что все [документация по Java] (http://docs.oracle.com/javase/8/docs/index.html) находится в сети, не так ли? – dimo414

2

В файле манифеста содержится в META-INF поддиректорию баночки файла под названием MANIFEST.MF .Whenever вы создаете файл фляги для командной строки с помощью команды банку CVF Jarfilename FilesToadd Затем файл манифеста по умолчанию является создано. Можно просмотреть этот файл и получить представление о действительном файле манифеста. Чтобы извлечь файл манифеста из jar-типа, введите следующую команду в cmd jar xvf Jarfilename Теперь подкаталог META-INF появится в базовом каталоге, здесь вы можете просмотреть файл манифеста по умолчанию. Иногда при обновлении файла манифеста мы получаем java.io.IOException: неверный формат манифеста .Это ошибка возникает из-за следующих причин:

1.You может не осталось пространство между именем и значением любого раздела манифеста file,
Версия: 1.1 - это необязательный раздел, вместо этого напишите Версия: 1.1 что пространство между двоеточием и 1.1 действительно имеет значение.

2. При указании основного класса вы, возможно, добавили расширение .class в конце имени класса. Просто укажите основной класс, набрав Main-Class: Classname.

3.You, возможно, не добавил символ новой строки в конце file.You не нужно писать \ п для указания новой строки, а не просто оставить последнюю строку вашего манифеста файла заготовки, которая будет служить цели

4. Ваш текстовый файл для манифеста должен использовать кодировку UTF-8, иначе вы можете столкнуться с некоторыми неприятностями.

Наконец, я предоставляю пример того, как должен выглядеть файл манифеста. Здесь пакет калькулятор, а основным классом является калькулятор.Java

Manifest-Version: 2.1

Создано-By: UselessCoder

Пакет-Имя: калькулятор

класса Название: calculator.Calculator.java

Main-Class: калькулятор . Калькулятор

Смежные вопросы