Нет основного атрибута манифеста при создании банки Kotlin с использованием IntelliJ IDEA

При создании jar-файла из моего кода Kotlin и его запуске он говорит: «Нет основного атрибута манифеста». При просмотре manifest.mf он имеет следующее содержание:

Manifest-Version: 1.0

При просмотре файла в источнике он имеет следующее содержимое:

Manifest-Version: 1.0
Main-Class: MyMainClass

При ручном копировании исходного манифеста в банку он работает отлично.

Скриншот настроек моего артефакта


person Laurin Neff    schedule 26.02.2019    source источник


Ответы (3)


Если какой-либо из зависимых jar-файлов имеет файл MANIFEST.MF, он переопределит ваш пользовательский файл, который определяет файл Main-Class.

Для решения этой проблемы необходимо сделать следующее:

Дополнительные сведения см. в связанной проблеме.

Вместо этого вы также можете использовать Gradle или Maven для создания толстой банки.

person CrazyCoder    schedule 26.02.2019
comment
Спасибо, это сработало! Я пометил ваш ответ как принятый ответ. Я выбрал маршрут Gradle, используя эту страницу: mkyong.com/gradle/gradle-create-a-jar-file-with-dependencies - person Laurin Neff; 28.02.2019

Я получил эту ошибку с Gradle и Kotlin. Мне пришлось добавить в свой build.gradle.kts явный атрибут манифеста:

tasks.withType<Jar> {
    manifest {
        attributes["Main-Class"] = "com.example.MainKt"
    }
}

Из документации Gradle лучше создать задачу fatJar чтобы объединить все зависимости времени выполнения на случай, если вы столкнетесь с java.lang.NoClassDefFoundError ошибками

person Sylhare    schedule 22.04.2020

1. Добавьте следующее определение задачи в сценарий сборки.

tasks.jar {
manifest {
    attributes["Main-Class"] = "MainKt"
}
configurations["compileClasspath"].forEach { file: File ->
    from(zipTree(file.absoluteFile))
}
}
  1. Затем снова выполните задачи jar (Tasks | build | jar) с правой боковой панели.
person Santosh Pillai    schedule 20.04.2021