Ответ 1
У меня была та же проблема.
Убедитесь, что ваш MANIFEST.MF находится в:
src/main/resources/META_INF/
НЕ
src/main/java/META_INF/
Я пытаюсь упаковать проект, используя библиотеки OptaPlanner 6.0.1, в .jar через Artemact IntelliJ IDEA, но вместо моего manifest.mf, содержащего стандартный
Manifest-Version: 1.0
Main-Class: a.b.c.app
в банке используется тот, который поставляется в ecj-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 как Extracted Directory, IntelliJ IDEA - v13.0.1.
У меня была та же проблема.
Убедитесь, что ваш MANIFEST.MF находится в:
src/main/resources/META_INF/
НЕ
src/main/java/META_INF/
Чтобы исправить:
Как отмечено в комментарии @grudolf в одном из других ответов, один из способов сделать это (и единственный, который работал у меня в импортированном проекте Gradle), - создать пустую банку следующим образом:
Это определенно ошибка в Idea. Этот связанный ответ надежно работает при извлечении каталогов. В сущности, вы найдете свой .idea/JARNAME.xml, добавьте следующий элемент в самую верхнюю часть элемента <root>
для вашей банки. Любые извлеченные элементы над вашей новой копией файла, содержащие манифест, будут сжимать ваш новый манифест.
<element id="directory" name="/META-INF">
<element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
</element>
Если вы хотите указать Main Class, вы должны добавить этот плагин в 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>
Существует несколько способов создания исполняемых банок. Использование функции IntelliJ GUI - один из лучших способов. Другой способ - использовать Maven (или аналогично в gradle, buildr и т.д.), Который является дружественным к серверу:
Он более или менее копирует вставку из примеров optaplanner maven build:
У меня была аналогичная проблема.
Проблема была в файле 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>
Manifest.mf работает!!!
Надеюсь, это поможет.
Чтобы не было проблем, таких как манифест, у вас должен быть каталог с именем "META-INF" в каталоге "src". Итак, создайте его и поместите в него файл с именем "MANIFEST.MF" со следующим содержимым:
Manifest-Version: 1.0
Main-Class: <packageName>.Main
Не забывайте заменить имя пакета, содержащего основной класс выше!