Неверный Манифест.МФ в 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.

763   7  

7 ответов:

у меня была та же проблема.

убедитесь, что ваш манифест.MF-это здесь:

src/main/resources/META_INF/

не

src/main/java/META_INF/

исправления:

  1. Файл > Структура Проекта
  2. под Настройки Проекта слева выберите "артефакты"
  3. найдите определение JAR в средней панели и выберите его
  4. в левой панели вкладки "макет вывода" найдите файл jar в списке и выберите его
  5. внизу Нажмите кнопку" использовать существующий манифест " и выберите файл манифеста, который находится в вашем проекте источник.
  6. Нажмите кнопку ОК и запустите строить
  • Структура Проекта - > Артефакты - > + 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:

  1. jar конечного пользователя (optaplanner-примеры-*.банку) должны включить путь к классам его зависимостей в манифест.
  2. в sh и bat script затем необходимо запустить эту банку с соответствующим образом.

чтобы не было проблем с манифестом, у вас должен быть каталог с именем "META-INF" в каталоге "src". Итак, создайте его и поместите файл с именем "манифест.МФ " в нем со следующим содержанием:

Manifest-Version: 1.0
Main-Class: <packageName>.Main

чтобы не забыть заменить имя пакета, содержащего основной класс выше!

Comments

    Ничего не найдено.