Can't execute jar- file: "no main manifest attribute"
Не удается выполнить jar- файл: "нет главного атрибута манифеста"
Я установил приложение, и когда я пытаюсь запустить его (это исполняемый файл jar), ничего не происходит. Когда я запускаю его из командной строки с помощью:
java -jar "app.jar"
Я получаю следующее сообщение:
нет главного атрибута манифеста в "app.jar"
Обычно, если бы я создал программу сам, я бы добавил атрибут main class в файл манифеста. Но в этом случае, поскольку файл взят из приложения, я не могу этого сделать. Я также попытался извлечь jar, чтобы посмотреть, смогу ли я найти основной класс, но классов слишком много, и ни в одном из них нет слова "main" в названии. Должен быть способ исправить это, потому что программа отлично работает в других системах.
Переведено автоматически
Ответ 1
Во-первых, немного странно видеть, что вы запускаете java -jar "app" и не java -jar app.jar
Во-вторых, чтобы сделать jar исполняемым файлом... вам нужно создать jar-файл с именем META-INF/MANIFEST.MF
сам файл должен содержать (по крайней мере) эту строку:
jar { manifest { attributes( 'Main-Class': 'com.mypackage.MyClass' ) } }
Ответ 2
Это должно было быть java -jar app.jar вместо java -jar "app".
-jar Опция работает только в том случае, если JAR-файл является исполняемым JAR-файлом, что означает, что в нем должен быть файл манифеста с Main-Class атрибутом. Смотрите раздел Упаковка программ в JAR-файлы, чтобы узнать, как создать исполняемый файл JAR.
Если это не исполняемый файл JAR, то вам нужно будет запустить программу с чем-то вроде:
java -cp app.jar com.somepackage.SomeClass
где com.somepackage.SomeClass - класс, содержащий main метод для запуска программы. (Что это за класс, зависит от программы, по предоставленной вами информации определить невозможно).
Ответ 3
В качестве альтернативы вы можете использовать maven-assembly-plugin, как показано в примере ниже:
В этом примере все банки зависимостей, указанные в разделе, будут автоматически включены в ваш отдельный jar. Обратите внимание, что jar-with-dependencies следует буквально указывать как, а не заменять именами файлов jar, которые вы хотите включить.
Ответ 4
Это потому, что Java не может найти главный атрибут в файле MANIFEST.MF . Главный атрибут необходим, чтобы указать Java, какой класс она должна использовать в качестве точки входа приложения. Внутри jar-файла файл MANIFEST.MF находится в папке META-INF . Интересно, как вы могли бы посмотреть, что находится внутри jar-файла? Откройте jar-файл с помощью WinRAR.
Главный атрибут внутри MANIFEST.MF выглядит следующим образом:
Main-Class: <packagename>.<classname>
Вы получаете ошибку "нет главного атрибута манифеста", когда эта строка отсутствует в файле MANIFEST.MF.
Указывать этот атрибут внутри файла MANIFEST.MF - это действительно огромная путаница.
Обновить
Я только что нашел действительно удобный способ указать точку входа приложения в Eclipse :
Выберите Файл> Экспорт..
Выберите JAR-файл, затем следующий
Дайте ему имя в следующем окне, затем Next
Снова выберите Next
Вы увидите "Выберите класс точки входа приложения", просто выберите класс, и Eclipse автоматически создаст для вас классный MANIFEST.MF.