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

时间:2019-07-07 11:40:48

标签: kotlin

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

properties = response.xpath("//div[@class='w-container main-content remodal-bg']/a")
for prop in properties:
    link = 'http://www.remax.co.za/' + prop.xpath("./@href").extract_first()

然后我用kotlinc编译了它

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

没有错误,并且hello.jar生成。 当我运行它时

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

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

$java -jar hello.jar

我不知道这个问题。 我的kotlin版本是1.3.40,JDK版本是1.8.0

2 个答案:

答案 0 :(得分:4)

我遇到了这个问题,而Kotlin和gradle遇到了同样的问题。我想打包以使罐子正常工作,但不断出现堆球错误。

使用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) }
    })
}

因此,一旦您gradle clean build,您可以执行以下操作:

gradle run
> Hello, World!

假设您的投影机使用build/libs/hello.jar中的广口瓶,假设您在settings.gradle.kts中设置了rootProject.name = "hello"

然后您可以运行:

java -jar hello.jar
> Hello, World!

答案 1 :(得分:0)

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