Неверный Манифест.МФ в IntelliJ идея создана.сосуд
Я пытаюсь упаковать проект с помощью библиотеки OptaPlanner 6.0.1 в a .jar через артефакт jar IntelliJ IDEA, но вместо моего манифеста.mf, содержащий стандарт
Manifest-Version: 1.0
Main-Class: a.b.c.app
банку использует предоставленный в суд-3.7.2.jar, одна из библиотек поддержки OptaPlanner:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
из-за этого "no main manifest attribute, in appname.jar" ошибка происходит при попытке запустить приложение. Если я вручную заменю манифест .файл jar с моим все работает правильно. Быть там я могу что-нибудь сделать, чтобы исправить это?
Я храню библиотеки в отдельном каталоге / lib, и они были добавлены в корень артефакта jar как извлеченный каталог, IntelliJ IDEA-v13.0.1.
7 ответов:
у меня была та же проблема.
убедитесь, что ваш манифест.MF-это здесь:
src/main/resources/META_INF/не
src/main/java/META_INF/
исправления:
- Файл > Структура Проекта
- под Настройки Проекта слева выберите "артефакты"
- найдите определение JAR в средней панели и выберите его
- в левой панели вкладки "макет вывода" найдите файл jar в списке и выберите его
- внизу Нажмите кнопку" использовать существующий манифест " и выберите файл манифеста, который находится в вашем проекте источник.
- Нажмите кнопку ОК и запустите строить
- Структура Проекта - > Артефакты - > + Jar - > Пустой
- центральная панель теперь имеет создать манифест и использовать существующие кнопки Манифеста. Используйте один из них.
- у меня были трудности, если я извлек зависимые библиотеки с их собственными манифестами в выходной корень, они казалось, периодически перезаписывать новый вручную созданный манифест. Возня с порядком операций, казалось, заставила его работать.
обновление:
Это определенно ошибка в идее. этот связанный ответ надежно работает, когда есть извлеченные каталоги. В сущности, вы находите свое .идея/JARNAME.xml, добавить добавьте следующий элемент в верхней на
<root>элемент для вашей банки. Любые извлеченные элементы выше вашего новый файл-копия, содержащая манифест, будет блокировать ваш новый манифест.<element id="directory" name="/META-INF"> <element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" /> </element>
Если вы хотите указать основной класс, вы должны добавить этот плагин в pom.XML-код:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <mainClass>Form</mainClass> </manifest> </archive> </configuration> </plugin>
у меня была похожая проблема.
проблема была в файле pom.XML.
<archive> <manifestEntries> <Dependencies>one.jar, two.rar, other.jar </Dependencies> </manifestEntries> </archive>Я не знаю, по какой причине этот код работает в eclipse, но не в IntelliJ
это правильно.
<archive> <manifestEntries> <Dependencies>one.jar, two.rar, other.jar</Dependencies> </manifestEntries> </archive>Манифест.МФ работает!!!
Я надеюсь, что это помогает.
существует несколько способов создания исполняемых банок. Использование функции графического интерфейса IntelliJ является одним из хороших способов. Другой способ-использовать Maven (или аналогично в gradle, buildr и т. д.), который является дружественным к серверу сборки:
Это более или менее копировать pasteable из примеров optaplanner Maven build:
- jar конечного пользователя (optaplanner-примеры-*.банку) должны включить путь к классам его зависимостей в манифест.
- в sh и bat script затем необходимо запустить эту банку с соответствующим образом.
чтобы не было проблем с манифестом, у вас должен быть каталог с именем "META-INF" в каталоге "src". Итак, создайте его и поместите файл с именем "манифест.МФ " в нем со следующим содержанием:
Manifest-Version: 1.0 Main-Class: <packageName>.Mainчтобы не забыть заменить имя пакета, содержащего основной класс выше!
Comments