gpt4 book ai didi

gradle - 如何构建和运行协程基础示例?

转载 作者:行者123 更新时间:2023-12-04 19:33:39 26 4
gpt4 key购买 nike

我只是想按照 this page 上的说明进行操作, 运行以下代码的状态:

import kotlinx.coroutines.*

fun main() {
GlobalScope.launch { // launch new coroutine in background and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
println("Hello,") // main thread continues while coroutine is delayed
Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}

我在 my-kotlin-library/src/main/kotlin/coroutines.kt 的文件中有这段代码。这是我的 build.gradle,位于 my-kotlin-library 根目录中:

plugins {
kotlin("jvm") version "1.3.21"
}

repositories {
jcenter()
}

dependencies {
implementation(kotlin("stdlib"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1")
testImplementation("junit:junit:4.12")
}

我可以使用 gradle build 进行构建,它会生成以下工件(仅显示相关内容):

build
├── classes
│   └── kotlin
│   └── main
│      ├── CoroutinesKt$main$1.class
│      ├── CoroutinesKt.class
│      └── META-INF
│         └── my-kotlin-library.kotlin_module
└── libs
   └── my-kotlin-library.jar

没有构建错误,但是当我尝试运行它时,我得到了一个 NoClassDefFoundError:

$ kotlin -cp build/libs/my-kotlin-library.jar CoroutinesKt
Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/GlobalScope
at CoroutinesKt.main(coroutines.kt:4)
at CoroutinesKt.main(coroutines.kt)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.jetbrains.kotlin.runner.AbstractRunner.run(runners.kt:61)
at org.jetbrains.kotlin.runner.Main.run(Main.kt:109)
at org.jetbrains.kotlin.runner.Main.main(Main.kt:119)
Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.GlobalScope
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 9 more

我找到了协程 jar 文件并尝试将其也包含在类路径中:

$ kotlin -cp ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.1.1/3d2b7321cdef9ebf9cb7729ea4f75a6f6457df86/kotlinx-coroutines-core-1.1.1.jar:build/libs/my-kotlin-library.jar CoroutinesKt

不幸的是,这产生了同样的错误。我一定是配置不正确,但我找不到在 Android Studio 或 IntelliJ IDEA 之外使用协程构建和运行的好示例。

最佳答案

您应该配置您的 gradle 构建以创建一个 uber-jar,其中包含您所有的依赖项,并有一个声明的主类,您可以使用 java -jar <jarname> 简单地运行它。 ,或者您应该让 gradle 构建并运行您的程序。

要使后者工作,请将其添加到 build.gradle :

apply plugin: 'application'
mainClassName = 'CoroutinesKt`

然后写

$ gradle run

在命令行。

关于gradle - 如何构建和运行协程基础示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405905/

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