"No main manifest attribute" 使用 IntelliJ IDEA 创建 Kotlin jar 时
"No main manifest attribute" when creating Kotlin jar using IntelliJ IDEA
当从我的 Kotlin 代码和 运行 创建一个 jar 时,它显示 "No main manifest attribute"。
查看 manifest.mf 时,它包含以下内容:
Manifest-Version: 1.0
查看源中的文件时,它包含以下内容:
Manifest-Version: 1.0
Main-Class: MyMainClass
当手动将源清单复制到jar 时,它运行完美。
Screenshot of my artifact settings
如果任何依赖的 jar 有一个 MANIFEST.MF
文件,它将覆盖您定义 Main-Class
.
的自定义文件
为了解决这个问题,您应该执行以下操作:
- 禁用 alphabetical ordering
- Change items ordering 因此具有
META-INF/MANIFEST.MF
文件的项目是列表中的第一个
- 您的自定义
MANIFEST.MF
将被 IntelliJ IDEA 和 displayed for the jar 工件采用。
有关详细信息,请参阅 related issue。
您也可以使用 Gradle 或 Maven 来生成 fat jar。
我在使用 Gradle 和 Kotlin 时遇到了这个错误。
我必须在 build.gradle.kts
中添加一个明确的清单属性:
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "com.example.MainKt"
}
}
从 gradle documentation 开始,最好创建一个 fatJar 任务来包含所有运行时依赖项,以防遇到 java.lang.NoClassDefFoundError
错误
1.Add 构建脚本中的以下任务定义
tasks.jar {
manifest {
attributes["Main-Class"] = "MainKt"
}
configurations["compileClasspath"].forEach { file: File ->
from(zipTree(file.absoluteFile))
}
}
- 然后再次从右侧边栏中执行 jar 任务(任务 | 构建 | jar)。
对于 Spring 启动应用程序:
在 build.gradle.kts
中对我有用的 (gradle kotlin)
- 添加 spring 引导插件 &。应用依赖管理
plugins {
id("org.springframework.boot") version "2.6.7"
}
apply(plugin = "io.spring.dependency-management")
- 设置你的主class
springBoot {
mainClass.set("com.example.Application")
}
通过阅读 spring-boot 找到的文档发现了这一切 here
当从我的 Kotlin 代码和 运行 创建一个 jar 时,它显示 "No main manifest attribute"。 查看 manifest.mf 时,它包含以下内容:
Manifest-Version: 1.0
查看源中的文件时,它包含以下内容:
Manifest-Version: 1.0
Main-Class: MyMainClass
当手动将源清单复制到jar 时,它运行完美。
Screenshot of my artifact settings
如果任何依赖的 jar 有一个 MANIFEST.MF
文件,它将覆盖您定义 Main-Class
.
为了解决这个问题,您应该执行以下操作:
- 禁用 alphabetical ordering
- Change items ordering 因此具有
META-INF/MANIFEST.MF
文件的项目是列表中的第一个 - 您的自定义
MANIFEST.MF
将被 IntelliJ IDEA 和 displayed for the jar 工件采用。
有关详细信息,请参阅 related issue。
您也可以使用 Gradle 或 Maven 来生成 fat jar。
我在使用 Gradle 和 Kotlin 时遇到了这个错误。
我必须在 build.gradle.kts
中添加一个明确的清单属性:
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "com.example.MainKt"
}
}
从 gradle documentation 开始,最好创建一个 fatJar 任务来包含所有运行时依赖项,以防遇到 java.lang.NoClassDefFoundError
错误
1.Add 构建脚本中的以下任务定义
tasks.jar {
manifest {
attributes["Main-Class"] = "MainKt"
}
configurations["compileClasspath"].forEach { file: File ->
from(zipTree(file.absoluteFile))
}
}
- 然后再次从右侧边栏中执行 jar 任务(任务 | 构建 | jar)。
对于 Spring 启动应用程序:
在 build.gradle.kts
中对我有用的 (gradle kotlin)- 添加 spring 引导插件 &。应用依赖管理
plugins {
id("org.springframework.boot") version "2.6.7"
}
apply(plugin = "io.spring.dependency-management")
- 设置你的主class
springBoot {
mainClass.set("com.example.Application")
}
通过阅读 spring-boot 找到的文档发现了这一切 here