Перейти к основному содержимому

Важность основного атрибута манифеста в самоисполняющемся JAR-файле

· 2 мин. чтения

1. Обзор

Каждый исполняемый класс Java должен содержать основной метод. Проще говоря, этот метод является отправной точкой приложения.

Чтобы запустить наш основной метод из самоисполняющегося JAR-файла, нам нужно создать правильный файл манифеста и упаковать его вместе с нашим кодом. Этот файл манифеста должен иметь основной атрибут манифеста, определяющий путь к классу, содержащему наш основной метод.

В этом руководстве мы покажем, как упаковать простой класс Java в виде самозапускающегося JAR-файла и продемонстрируем важность основного атрибута манифеста для успешного выполнения.

2. Выполнение JAR без основного атрибута манифеста

Для большей практичности мы покажем пример неудачного выполнения без надлежащего атрибута манифеста.

Давайте напишем простой класс Java с основным методом:

public class AppExample {
public static void main(String[] args){
System.out.println("AppExample executed!");
}
}

Чтобы упаковать наш класс-пример в архив JAR, нам нужно перейти в оболочку нашей операционной системы и скомпилировать его:

javac -d . AppExample.java

Затем мы можем упаковать его в JAR:

jar cvf example.jar com/foreach/manifest/AppExample.class

Наш example.jar будет содержать файл манифеста по умолчанию. Теперь мы можем попытаться выполнить JAR:

java -jar example.jar

Выполнение завершится с ошибкой:

no main manifest attribute, in example.jar

3. Выполнение JAR с основным атрибутом манифеста

Как мы видели, JVM не смогла найти наш основной атрибут манифеста. Из-за этого он не смог найти наш основной класс, содержащий наш основной метод.

Давайте включим правильный атрибут манифеста в JAR вместе с нашим кодом. Нам нужно создать файл MANIFEST.MF , содержащий одну строку:

Main-Class: com.foreach.manifest.AppExample

Наш манифест теперь содержит путь к нашему скомпилированному AppExample.class .

Поскольку мы уже скомпилировали наш примерный класс, нет необходимости делать это снова.

Мы просто упакуем его вместе с нашим файлом манифеста:

jar cvmf MANIFEST.MF example.jar com/foreach/manifest/AppExample.class

На этот раз JAR выполняется, как и ожидалось, и выводит:

AppExample executed!

4. Вывод

В этой быстрой статье мы показали, как упаковать простой класс Java в виде самоисполняющегося JAR-файла, и продемонстрировали важность основного атрибута манифеста на двух простых примерах.

Полный исходный код примера доступен на GitHub . Это проект на основе Maven, поэтому его можно импортировать и использовать как есть.