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, поэтому его можно импортировать и использовать как есть.