No main manifest attribute in jar решение

No main manifest attribute in jar решение

Ситуация такая: Есть maven проект, в нем несколько модулей (так нужно), есть класс с методом main(), в котором вызываются определенные методы, но это не суть. Я мало знаком с maven’ом, но мне нужно создать запускаемый jar файл этого проекта. Я работаю в intellij idea, чтобы создать jar я выполняю maven: clean + install, у меня создалось 3 папки target в каждом модуле. Метод main() находиться в модуле calc-console.

Table of contents

Problem

Sometimes you face the following error while runing an executable jar :

Solution

  • Main-class property is missing on your jars META-INF/MANIFEST.MF. Correct it by adding the following lines to your pom.xml

Consider that the the fully qualified name of your Main class is com.roufid.tutorials.AppTest

    Launch a clean install on your application

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

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

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

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

Во-первых, странно видеть, что вы запускаете java -jar "app" а не java -jar app.jar

Во-вторых, чтобы сделать исполняемый файл jar. вам нужно создать файл с именем META-INF/MANIFEST.MF

сам файл должен иметь (по крайней мере) этот один вкладыш:

Читайте также:  Mass effect andromeda сколько часов геймплея

Где com.mypackage.MyClass — это класс, содержащий общедоступную статическую точку входа void main (String [] args).

Обратите внимание, что есть несколько способов сделать это с помощью CLI, Maven, Ant или Gradle:

Для CLI подойдет следующая команда: (tks @dvvrt) jar cmvf META-INF/MANIFEST.MF .jar

Для Maven что-то вроде следующего фрагмента должно помочь. Обратите внимание, что это только определение плагина, а не полный pom.xml:

(Выберите соответствующую вашему проекту.)

Для Ant приведенный ниже фрагмент кода должен помочь:

Кредиты Майкла Ниманда —

Для Gradle:

Это должно быть java -jar app.jar вместо java -jar "app" .

Параметр -jar работает только в том случае, если JAR файл является исполняемым JAR файлом, что означает, что в нем должен быть файл манифеста с атрибутом Main-Class . См. "Программы упаковки в файлах JAR" , чтобы узнать, как создать исполняемый JAR.

Если это не исполняемый JAR, вам нужно запустить программу с чем-то вроде:

где com.somepackage.SomeClass — это класс, содержащий метод main для запуска программы. (То, что этот класс зависит от программы, невозможно сообщить из предоставленной вами информации).

В качестве альтернативы вы можете использовать maven-assembly-plugin, как показано в следующем примере:

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

Это потому, что Java не может найти главный атрибут в файле MANIFEST.MF. Главный атрибут необходим, чтобы указать java, какой класс он должен использовать в качестве точки входа приложения. В файле jar файл MANIFEST.MF находится в папке META-INF. Интересно, как вы могли бы посмотреть, что внутри файла jar? Откройте файл jar с помощью WinRAR.

Читайте также:  Браузер предотвратил открытие страницы exinariuminix info

Основной атрибут внутри MANIFEST.MF выглядит следующим образом:

Вы получаете эту ошибку "нет основного манифеста", когда эта строка отсутствует в файле MANIFEST.MF.

Это действительно огромный беспорядок, чтобы указать этот атрибут внутри файла MANIFEST.MF.

Обновление: я просто нашел очень аккуратный способ указать точку входа приложения в eclipse. Когда вы говорите "Экспорт",

Ответ Gradle заключается в том, чтобы добавить параметр jar/manifest/attributes следующим образом:

Для maven это то, что его решило (для меня, для кодовой базы Veetle на GitHub):

У меня возникла эта проблема при создании банки с использованием IntelliJ IDEA. См. это обсуждение.

Для меня было решено создать артефакт jar, выбрав JAR > Из модулей с зависимостями, но не принимая каталог по умолчанию для META-INF/MANIFEST.MF. Измените его -/src/main/java на -/src/main/resources.

В противном случае он включал файл манифеста в банке, но не тот, который был в /src/main/java, который должен иметь.

Попробуйте эту команду включить банку:

Я была такая же проблема. добавив следующие строки в файл pom, он заработал. Плагин обеспечит процесс сборки вашего приложения всеми необходимыми шагами.

Для меня ни один из ответов не помог — у меня был файл манифеста в правильном месте, содержащий Main-Class и все. Что меня смутило:

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

(источник). Добавление новой строки в конце манифеста зафиксировано.

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

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

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

Читайте также:  Бит может принимать значения

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

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

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

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

2. После перезапуска eclipse попытайтесь выяснить, может ли ваше eclipse распознать основной класс/метод по вашему проекту Java → щелкните правой кнопкой мыши → Запустить как → Запустить конфигурации → Главная → нажмите кнопку "Поиск", чтобы узнать, может ли ваше затмение искать ваш основной класс в файле JAR. — > Это для проверки того, что JAR файл будет иметь точку входа в основной класс.

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

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

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

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

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

Ссылка на основную публикацию
Adblock detector