当前位置: 首页 > 知识库问答 >
问题:

kotlin 程序错误:jar 文件中没有主清单属性

鲜于谦
2023-03-14

我写了一个简单的kotlin helloworld程序hello.kt

fun main(args: Array<String>) {
    println("Hello, World!")
}

然后我用kotlinc编译了它

$kotlinc hello.kt -include-runtime -d hello.jar

没有错误,你好。jar被生成。当我运行它时

$java -jar hello.jar

它说hello.jar中没有主清单属性

$no main manifest attribute, in hello.jar

我想不出这个问题。我的科特林版本是1.3.40,JDK版本是1.8.0

共有2个答案

从光启
2023-03-14

尝试升级到版本1.3.41并使用JDK 1.11。

龙承颜
2023-03-14

我偶然发现了这个答案,同时也有同样的问题。我想打包让罐子工作,但不断起球错误。

使用像com.example.helloworld.kt这样的文件包含您的代码:

fun main(args: Array<String>) {
    println("Hello, World!")
}

下面是文件build.gradle.kts的样子,可以让您开始使用gradle。

import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
  application
  kotlin("jvm") version "1.3.50"
}

// Notice the "Kt" in the end, meaning the main is not in the class
application.mainClassName = "com.example.MainKt"

dependencies {
  compile(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
  kotlinOptions.jvmTarget = "1.8"
}

tasks.withType<Jar> {
    // Otherwise you'll get a "No main manifest attribute" error
    manifest {
        attributes["Main-Class"] = "com.example.MainKt"
    }

    // To add all of the dependencies otherwise a "NoClassDefFoundError" error
    from(sourceSets.main.get().output)

    dependsOn(configurations.runtimeClasspath)
    from({
        configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
    })
}

因此,一旦您<code>gradle清理构建</code>后,您可以执行以下操作:

gradle run
> Hello, World!

假设您的投影仪使用< code > build/libs/hello . jar 中的jar假设您在< code>settings.gradle.kts中设置了< code > root project . name = " hello "

然后你可以运行:

java -jar hello.jar
> Hello, World!
 类似资料:
  • 我已经看了几个不同的线程,没有找到解决方案。我做了一个项目,使用java和Gradle从google sheets检索数据。我已经创建了一个工件,并通过IntelliJ构建了jar文件。当我尝试使用“java-jar filename.jar”通过终端运行jar时,我得到“no main manifest attribute,in filename.jar” My Manifest.mf位于mai

  • 我知道有很多像这样的题目,但我没有找到答案我的问题。我已经在IntelliJ中创建了JAR文件,并在项目结构中构建了工件。在Java文件夹中,我有一个包META-INF和manifest.mf: 那么我是否应该将它手动添加到IntelliJ中的JAR中呢? Edit:CrazyCoder给出了一个很好的说明,说明META-INF应该在resourse文件夹中,但是我的IntelliJ默认设置一开始

  • 我正在尝试运行由maven shade插件创建的jar。我正在以以下方式配置主类: 编辑:我使用jar tf app.jar检查了jar的内容,看到了一个manifest.mf文件。但它没有main类的条目。我如何确保jar中的清单文件中有这个条目,以便在shade插件配置中添加它?

  • 我知道jar文件应该有一个manifest.mf main-class:属性,以便有一个入口点并使jar文件可以运行。现在,我有了一个jar文件,我已经在下面构建了它。这些类都是卷饼包的一部分。我的MANIFEST.MF文件如下所示:

  • 我最近才开始在Java中玩弄Maven。测试我的项目的时间到了,它在NetBeans窗口中运行良好,运行了app.java(com.mycompany.app)中的主类,但是当我试图从命令行运行它时,我得到了一个错误: 有事吗?

  • 我正在尝试运行这个Java GUI应用程序,但我不确定如何让它运行。该项目位于:https://gitee.com/gangshushu/v7/tree/master/admon_gui/one-jar. 我最初的尝试是: javaone-jar-ant-task-0.97.jar 但我最后犯了一个错误: 在one-jar-ant-task-0.97中没有主清单属性。罐子 做一些搜索周围,未能运行