2016-05-17 4 views
2

Я написал программу, которая охватывает несколько классов в IntelliJ, и отлично работает, когда я тестировал ее в среде IDE. Тем не менее, всякий раз, когда я следую учебникам, чтобы сделать проект в исполняемом файле .jar, он не запускается.Файлы JAR, созданные IntelliJ IDEA, не запускаются

файл в папке из не работает, когда дважды щелкните по нему и говорит: «JAR-файл Java„projectName.jar“не может быть запущен.

При открытии его из терминала, я получаю . ошибка "не удалось найти или загрузить основной класс" Я "$ Java -jar projectName.jar"

я следовал следующие шаги:

  1. Open Project Structure, Артефакты и нажмите (+)
  2. .
  3. Под JAR, из модулей с зависимостей.
  4. Обратите внимание на класс с моим основным методом и нажмите «ОК».
  5. Нажмите кнопку Apply и OK для выхода.
  6. Затем я закрываю структуру проекта и открываю сборку, а затем строю артефакты ...
  7. Затем я нажимаю «Сборка».
  8. Перейдите к ~/IdeaProjects/Projectname/выход/артефакты/projectName_jar/projectName.jar

Тогда я хотел бы попробовать запустить его, но он не работает. Мой проект имеет графический интерфейс и может запускаться из командной строки. Когда я скомпилировал основной метод в терминале, он работал нормально, но мне нужен JAR-файл. Я не уверен, что я должен включить в вопрос, так как я уверен, что мой код не связан. Я также использую Maven, не уверен, что это связано. Есть ли другие вещи, которые я должен делать или добавлять в свой проект, прежде чем я создам JAR?

ответ

1

Необходимо установить атрибут Main-Class. Один из способов проверить это - открыть Jar с помощью утилиты Zip и найти файл META-MF/MANIFEST.MF или открыть этот файл с помощью блокнота, блокнота ++ или любого устройства для чтения документов. Если «Main-Class» не находится в своем или не соответствует правильному основному классу, вы получите полученную вами ошибку. Увидев учебник IntelliJ, он имеет поле Main-Class при создании публикации артефакта. Я включил ссылку ниже на страницу IntelliJ.

IntelliJ Creating an Artifact Tutorial

+0

Файл MANIFEST.MF был создан IntelliJ, поэтому я предполагаю, что это верный. Основной класс правильный, но есть только 2 строки, один - «Манифест-Версия: 1.0», а другой - «Основной класс: имя_проекта». Должно ли быть что-то еще? –

+0

Потенциально. Атрибут Main-Class должен быть полным доменом. I.Е если ваш класс находится в каком-то пакете или пакетах ... 'com.packagename.ClassName'. См. [Основы пакета] (https://newcircle.com/bookshelf/java_fundamentals_tutorial/packaging) Разделы: 7.5. Использование членов пакета: квалифицированные имена. Поэтому, если у вас нет пакетов, атрибут - это просто имя класса, у которого есть основной метод, который вы хотите запустить. Вот лучшее описание этого с веб-сайта Oracles [Установка точки входа приложения] (https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html) – Underbalanced

+0

@ EricChan Я забыл пометить вас в своем комментарий. Новое для стека. – Underbalanced

0

Это может быть результатом манифеста создается в неправильном месте.

Сначала убедитесь, что он находится в src/main/resources/META-INF/MANIFEST.MF

(Intellij иногда неправильно помещает его в /src/main/java/META-INF/MANIFEST.MF)

Затем убедитесь, что баночка ищет META-INF в ЦСИ реж НЕ в/Java ИЛИ /Ресурсы. Это означает, что:

При настройке Файл>Структура проекта>артефакты>+>JAR>Из модулей с зависимостями ... тогда ваш Справочник для META-INF/MANIFEST.MF должен заканчиваться на src.Пример:

ONLY C:\Users\User\StudioProjects\Project\src\ 
NOT THE PREPOPULATED C:\Users\User\StudioProjects\Project\src\main\java 

Если Структура проекта банка уже настроен изменить файл манифеста путь к:

C:\Users\User\StudioProjects\Project\src\META-INF\MANIFEST.MF 
INSTEAD OF C:\Users\User\StudioProjects\Project\src\main\java\META-INF\MANIFEST.MF 
Смежные вопросы