Не запускается JAR-файл: "no main manifest attribute"
Причина ошибки и полное решение
Ошибка no main manifest attribute возникает, потому что в JAR-файле отсутствует или неправильно заполнен файл META-INF/MANIFEST.MF. Этот файл содержит метаданные, в том числе указание на класс с точкой входа — Main-Class. Без него JVM не знает, какой класс запускать.
Команда jar cf myapp.jar Main.class создаёт JAR с автоматически сгенерированным манифестом, но в нём нет строки Main-Class. Нужно либо указать её вручную, либо использовать опцию -e (начиная с Java 8) или -m для указания собственного файла манифеста.
Способ 1: Использовать опцию -e (рекомендуется для простых проектов)
Это самый простой способ, если у вас один главный класс:
jar cfe myapp.jar Main Main.class
Здесь флаг e означает "entry point". После имени JAR-файла указывается полное имя класса (без .class). Команда автоматически создаст манифест с правильной Main-Class.
Способ 2: Создать файл манифеста вручную
Подходит для сложных проектов или когда нужно добавить другие атрибуты (например, Class-Path).
- Создайте текстовый файл, например
MANIFEST.MF, с содержимым:
Manifest-Version: 1.0
Main-Class: Main
Важно: После Main-Class: Main обязательно должна быть пустая строка (перевод строки). Без неё манифест может быть прочитан некорректно.
- Затем создайте JAR, указав этот файл манифеста:
jar cfm myapp.jar MANIFEST.MF Main.class
Флаг m указывает, что нужно использовать внешний файл манифеста.
Способ 3: Использовать Maven или Gradle (для реальных проектов)
В больших проектах сборку автоматизируют с помощью систем сборки. Пример для Maven — в pom.xml нужно добавить плагин:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
После этого команда mvn package создаст правильный JAR.
Проверка манифеста
Чтобы убедиться, что манифест корректен, можно просмотреть его содержимое:
jar tf myapp.jar META-INF/MANIFEST.MF
jar xf myapp.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF
Вы должны увидеть строку Main-Class: Main.
Распространённые ошибки
- Забыли указать класс с методом
main— убедитесь, что метод объявлен какpublic static void main(String[] args). - Класс находится в пакете — тогда нужно указывать полное имя:
Main-Class: com.example.Main. - Лишние пробелы или отсутствие пустой строки в конце манифеста.
После исправления ваш JAR будет запускаться командой java -jar myapp.jar.
Альтернативный подход: использование IntelliJ IDEA или Eclipse
Если вы используете среду разработки (IDE), создание исполняемого JAR-файла можно сделать через графический интерфейс, что исключает ручные ошибки с манифестом.
IntelliJ IDEA:
- Перейдите в
File → Project Structure → Artifacts. - Нажмите
+→JAR → From modules with dependencies. - Выберите главный класс (Main) и настройте путь к JAR.
- Нажмите OK, затем
Build → Build Artifacts → Build.
Eclipse:
- Правый клик на проекте →
Export → Java → Runnable JAR file. - Выберите конфигурацию запуска (Launch configuration) и укажите, куда сохранить JAR.
- Выберите опцию "Extract required libraries into generated JAR" (если есть зависимости).
- Нажмите Finish.
IDE автоматически создаёт правильный манифест и включает все необходимые классы. Это особенно удобно для новичков, так как не требует ручной работы с командной строкой.
Если вы всё же предпочитаете командную строку, рекомендую использовать jar cfe — это самый быстрый способ без лишних файлов.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги