Не могу выполнить jar-файл: "нет основного атрибута манифеста" - PullRequest
798 голосов
/ 13 марта 2012

Я установил приложение, когда я пытаюсь его запустить (это исполняемый файл jar), ничего не происходит. Когда я запускаю его из командной строки с помощью:

java -jar "app.jar"

Я получаю следующее сообщение:

без атрибута основного манифеста, в "app.jar"

Обычно, если бы я создал программу сам, я бы добавил атрибут основного класса в файл манифеста. Но в этом случае, так как файл из приложения, я не могу этого сделать. Я также попытался извлечь банку, чтобы посмотреть, смогу ли я найти основной класс, но есть много классов, и ни один из них не имеет слова «main» в своем названии. Должен быть способ исправить это, потому что программа отлично работает в других системах.

Ответы [ 34 ]

9 голосов
/ 01 сентября 2017

Я получил ту же ошибку только сейчас.Если вы используете gradle, просто добавьте следующий в ur gradle.build:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.company.project.MainClass'
    }
}

Где com.company.project.MainClass путь к классу ур с методом public static void main(String[] args).

9 голосов
/ 24 ноября 2016

Если вы используете Maven, включите в пометку следующее

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
9 голосов
/ 23 апреля 2017

У меня была такая же проблема сегодня. Моя проблема была решена моим перемещением META-INF в папку ресурсов.

5 голосов
/ 26 февраля 2016

Я столкнулся с той же проблемой, и теперь она исправлена ​​:) Просто следуйте приведенным ниже шагам, и ошибка может быть связана с чем угодно, но приведенные ниже шаги делают процесс более плавным. Я трачу много времени, чтобы найти исправление.

1. Попробуйте перезапустить Eclipse (если вы используете Eclipse для создания JAR-файла) -> На самом деле это помогло моей проблеме в правильном экспорте файла JAR.

2.После перезапуска затмения попробуйте посмотреть, сможет ли ваше затмение распознать основной класс / метод по вашему Java-проекту -> щелкните правой кнопкой мыши -> Выполнить как -> Выполнить настройки -> Main -> нажмите кнопку «Поиск», чтобы увидеть, может ли ваше затмение найти ваш основной класс в файле JAR. -> Это для проверки того, что JAR-файл будет иметь точку входа в основной класс.

  1. После этого экспортируйте ваш проект Java Dynamic как файл «Runnable JAR», а не как файл JAR.

  2. В конфигурации запуска Java выберите свой основной класс.

  3. После экспорта файла jar используйте приведенную ниже команду для выполнения. java -cp [Ваш JAR] .jar [полный пакет] .MainClass например: java -cp AppleTCRuleAudit.jar com.apple.tcruleaudit.classes.TCRuleAudit

  4. Возможно, вы столкнулись с ошибкой неподдерживаемой версии Java. исправление заключается в изменении java_home в вашем профиле оболочки оболочки в соответствии с версией java, используемой для компиляции проекта в eclipse.

Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас все еще есть какие-либо проблемы.

5 голосов
/ 13 марта 2012

Если банка не соответствует правилам , это не исполняемый файл.

4 голосов
/ 27 октября 2017

Я лично думаю, что все ответы здесь неверно понимают вопрос.Ответ заключается в том, как Spring-Boot создает .jar.Всем известно, что Spring Boot настраивает манифест, подобный этому, который варьируется от всех предположений , что это стандартный запуск .jar, который может быть или не быть:

Start-Class: com.myco.eventlogging.MyService
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Main-Class: org.springframework.boot.loader.JarLauncher

Возможноон должен быть выполнен с org.springframework.boot.loader.JarLauncher на пути к классам?

4 голосов
/ 03 августа 2012

Любой исполняемый jar-файл должен запускаться либо нажатием, либо путем запуска с использованием командной строки, например java -jar app.jar (используйте «если путь к jar содержит пробел» - т.е. java -jar «C: \ имя папки \ app.jar» ). Если ваш исполняемый файл jar не запущен, это означает, что он не создан должным образом.

Для лучшего понимания извлеките файл jar (или просмотрите с помощью любого инструмента, для Windows 7-Zip это хорошо) и проверьте файл в /META-INF/MANIFEST.MF. Если вы найдете какую-либо запись, как

Main-Class: your.package.name.ClaaswithMain - тогда все в порядке, в противном случае вы должны предоставить его.

Помните о добавлении записи Main-Class в файл MANIFEST.MF, проверьте, где вы ее сохраняете!

4 голосов
/ 28 августа 2013

Возможно, вы не создали файл jar должным образом:

ex: отсутствует опция m при создании jar

Следующие работы:

jar -cvfm MyJar.jar Manifest.txt *.class
4 голосов
/ 28 сентября 2013

Вы можете просто выполнить этот шаг Создайте JAR-файл, используя

 jar -cfm jarfile-name manifest-filename Class-file name

Во время работы с JAR-файлом просто запустите вот так

 java -cp jarfile-name main-classname
3 голосов
/ 22 апреля 2017

Приведенные выше ответы были только частично полезны для меня.java -cp было частью ответа, но мне нужна была более конкретная информация о том, как определить класс для запуска.Вот что сработало для меня:

Шаг 1: найдите класс, который мне нужен для запуска

jar tf /path/to/myjar.jar | more

Верхние строки результата были:

META-INF/
META-INF/MANIFEST.MF
somepath/
somepath/App.class
META-INF/maven/
...

Приложение.class содержит основной класс для запуска.Я не уверен на 100%, можете ли вы всегда предполагать, что класс, который вам нужен, - первый, но это было для меня.Если это не так, я бы подумал, что не так уж сложно использовать grep для исключения результатов, связанных с библиотекой, чтобы сократить список классов до приемлемого размера.

Оттуда это было легко: я простоиспользуйте этот путь (минус суффикс ".class"):

java -cp /path/to/myjar.jar somepath/App
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...