gpt4 book ai didi

kotlin - Gradle的初学者问题

转载 作者:行者123 更新时间:2023-12-03 05:22:07 24 4
gpt4 key购买 nike

我正在尝试使用Gradle创建一个Kotlin项目(我是Gradle的初学者),并且想要构建一个可执行的jar文件。我有一个用gradle build构建的jar,但是它不能执行,因为jar中的 list 未指向我的主类。
我所能找到的一切都表明可以执行以下操作:

jar {
manifest {
attributes("Main-Class" to "com.something.mypackage.MainKt")
}
}
编辑:现在我已经正确构建了jar文件,但是当我尝试运行生成的jar时却出现了此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at com.ajsnarr.main.MainKt.main(Main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
build.gradle.kts
plugins {
application
kotlin("jvm") version "1.3.70"
java
}

// version = "0.1.0"
group = "com.ajsnarr"

application {
mainClassName = "com.ajsnarr.main.MainKt"
}

dependencies {
implementation(kotlin("stdlib"))
}

repositories {
jcenter()
}

sourceSets {
main {
java {
srcDirs(
"src/main/kotlin/"
)
}
}
}

tasks.jar {
manifest {
attributes("Main-Class" to "com.ajsnarr.main.MainKt")
}
}

最佳答案

解决了。
对于我要求(被部分编辑)的第一件事,要修改jar任务,请使用tasks.jar { ... }而不是jar
对于第二个问题(java.lang.NoClassDefFoundError),运行Kotlin的程序要求包含标准库。要解决此错误,您可以在运行jar文件时指定kotlin标准库,也可以创建包含所有库的“胖” jar文件。有几种方法可以做到这一点。
对于创建一个大的胖 jar 文件,此答案对我有帮助:kotlin program error: no main manifest attribute in jar file
这是我的工作 build.gradle.kts

plugins {
application
kotlin("jvm") version "1.3.70"
java
}

// version = "0.1.0"
group = "com.stuffhere"

application {
mainClassName = "com.stuffhere.main.MainKt"
}

dependencies {
implementation(kotlin("stdlib"))
}

repositories {
jcenter()
}

sourceSets {
main {
java {
srcDirs(
"src/main/kotlin/"
)
}
}
}

tasks.jar {
manifest {
attributes("Main-Class" to "com.stuffhere.main.MainKt")
}

// To add all of the dependencies
from(sourceSets.main.get().output)

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

关于kotlin - Gradle的初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63042972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com