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

1. Обзор

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

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

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

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

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

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

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

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

javac -d . AppExample.java

Тогда мы можем упаковать его в банку:

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

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

java -jar example.jar

Выполнение не удастся с ошибкой:

no main manifest attribute, in example.jar

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

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

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

Main-Class: com.baeldung.manifest.AppExample

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

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

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

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

AppExample executed!

4. Заключение

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

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