gpt4 book ai didi

java - 从工件的 .jar 运行时找不到 Kotlinx 协程类

转载 作者:行者123 更新时间:2023-11-30 05:23:59 28 4
gpt4 key购买 nike

我正在 IntelliJ Idea IDE 上开发一个使用 kotlinx 协程的 Kotlin 桌面应用程序。

这是我的 build.gradle 文件:

plugins {
id 'application'
id 'org.jetbrains.kotlin.jvm' version '1.3.60'
}

mainClassName = 'MainKt'

group 'my_group_name'
version '1.01'

repositories {
mavenCentral()
}

dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'

// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'

}

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

jar {
manifest {
attributes 'Main-Class': 'MainKt'
}

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

通过 IDE 运行项目时一切正常,但是当我生成 .jar 工件并通过 java -jar file.jar 运行它时,出现以下异常当使用协程类时抛出:

Exception in thread "Thread-2" java.lang.NoClassDefFoundError: kotlinx/coroutines/GlobalScope
Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.GlobalScope
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
<小时/>

为什么在生成的 .jar 工件上运行 java -jar file.jar 时 Kotlinx 协程不起作用?

最佳答案

经过很长时间寻找这个问题的解决方案,我找到了两种方法来解决它。

<小时/>

第一

生成的 .jar 工件不包含 Kotlinx 协程类,因为该工件是在将协程添加为依赖项之前在 IntelliJ Idea 上设置的。

因此,工件配置不包含 Kotlinx 协程(似乎它不与新的依赖项添加和删除同步)。

要解决这个问题,可以:

  • 手动将依赖项添加到工件生成配置(在项目设置上),或者;
  • 删除配置并重新创建。

第二个

创建一个fatJar任务o gradle如下

jar {
manifest {
attributes 'Main-Class': 'MainKt'
}
}

task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'MainKt'
}
baseName = project.name
from {
configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}
}
with jar
}

并运行该 gradle 任务

gradle fatJar

输出可以在build/libs下找到。

<小时/>

希望这可以帮助其他遇到同样问题的人:)

关于java - 从工件的 .jar 运行时找不到 Kotlinx 协程类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020341/

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