If you have an application bundled in a JAR file, you need some way to indicate which class within the JAR file is your application’s entry point. You provide this information with the Main-Class header in the manifest, which has the general form:
The value classname is the name of the class that is your application’s entry point.
Recall that the entry point is a class having a method with signature public static void main(String[] args) .
After you have set the Main-Class header in the manifest, you then run the JAR file using the following form of the java command:
The main method of the class specified in the Main-Class header is executed.
Содержание
- An Example
- Setting an Entry Point with the JAR Tool
- Manifest
- JAR пример
- Создание Jar файла
An Example
We want to execute the main method in the class MyClass in the package MyPackage when we run the JAR file.
We first create a text file named Manifest.txt with the following contents:
We then create a JAR file named MyJar.jar by entering the following command:
This creates the JAR file with a manifest with the following contents:
When you run the JAR file with the following command, the main method of MyClass executes:
Setting an Entry Point with the JAR Tool
The ‘e’ flag (for ‘entrypoint’) creates or overrides the manifest’s Main-Class attribute. It can be used while creating or updating a JAR file. Use it to specify the application entry point without editing or creating the manifest file.
For example, this command creates app.jar where the Main-Class attribute value in the manifest is set to MyApp :
You can directly invoke this application by running the following command:
Manifest
JAR пример
Манифест – это файл с расширением MF, который создаётся всегда, когда формируется Jar файл (за исключением случая, когда в команде на создание Jar файла указана опция M, не спутайте её с опцией m).
Этот создаваемый Jar инструментами манифест назовём манифестом по умолчанию (default manifest). Каждая строка файла манифеста – разделённая двоеточием пара “имя: значение”. Содержание манифеста по умолчанию можно изменить следующим образом. В папке bin нашего проекта создайте текстовый файл MANIFEST.txt, получим:
Введите текст в MANIFEST.txt:
и переведите курсор на новую строку, это важно:
Обратите внимание, на картинке курсор в начале новой строки. Сохраните текстовый файл MANIFEST.txt. В MANIFEST.txt мы объявили главный класс приложения. Наш класс находится в пакете myPack, это отражено в MANIFEST.txt: myPack.JarClass.
Ещё раз. Файл манифеста MANIFEST.MF автоматически создаётся всегда (если нет M в команде). Тогда для чего мы создали ещё какой-то MANIFEST.txt? Для того, чтобы изменить содержание дефолтного манифеста, т.е. MANIFEST.MF. При создании файла Jar строки из нашего MANIFEST.txt добавятся в файл MANIFEST.MF.
Создание Jar файла
Правой кнопкой по значку MyJar.bat -> Изменить и вносим такой текст:
Получаем:
Сохраните MyJar.bat. Теперь можно создать jar файл: два клика по MyJar.bat и через секунду получаем JarFile.jar:
Проверим работу полученного JarFile.jar: два раза кликаем по JarFile.jar и видим знакомое окно:
Файл манифеста содержится внутри архива JAR по пути “META-INF/MANIFEST.MF”. Он содержит информацию, которая позволяет указывать версию, производителя, цифровую подпись, дополнительные пути поиска классов и многое другое.
Пример файла “MANIFEST.MF”:
Как видите, файл состоит из ключей и их значений, разделённый символом «:». В нашем случае указывается версия спецификации манифеста 1.0, и что jar был создал 1.6.0_26-b03 (Sun Microsystems Inc.).
Пока эта информация не очень полезна. Но файл манифеста может содержать входную точку программы, например:
Здесь мы указали, что класс App в пакете ru.urvanov.javaexamples.springjavamailsenderimpl содержит статический метод main , который и должен запускаться при запуске Jar-файла командой:
Также в файле манифеста бывают различные секции. Секции обычно отделяются друг от друга пустой строкой и содержат название секции (пакета Java), для которого указываются отдельные атрибуты. Примерно так:
Файл манифеста должен быть в кодировке UTF-8 и может использовать переводы строк CR+LF, LF или просто CR.
Последняя строка в файле манифеста обязательно должна заканчиваться переводом строки!
Из самого кода на Java мы можем вручную считывать и обрабатывать файлы манифеста, если это необходимо. Для этого используется класс java . util . jar . Manifest . Напишем небольшой пример его использования. Считывать будем следующий файл манифеста:
Источник: