Рубрики
Без рубрики

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

Узнайте, как создать самоисполняющийся JAR, указав основной класс в качестве атрибута в файле манифеста.

Автор оригинала: baeldung.

1. Обзор

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

Чтобы запустить наш основной метод из самоисполняющегося файла 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 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 не смогла найти наш главный атрибут манифеста. Из-за этого он не смог найти наш основной класс, содержащий наш основной метод.

Давайте включим соответствующий атрибут манифеста в банку вместе с нашим кодом. Нам нужно будет создать файл 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, и продемонстрировали важность атрибута основного манифеста на двух простых примерах.

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