gpt4 book ai didi

java - Kotlin、Scala 和 Java 的 Gradle 构建失败

转载 作者:行者123 更新时间:2023-12-02 12:11:12 25 4
gpt4 key购买 nike

我有一个用 Java、Scala 和 Kotlin 编写的项目。

但是当我在 Gradle 中构建这个项目时,它出现错误并显示消息:

11:19:51: Executing task 'build'...

:compileKotlin
Using Kotlin incremental compilation
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (3, 19):
Unresolved reference: Flag
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (10, 18):
Unresolved reference: GroupMessageResponder
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (13, 2):
'doPost' overrides nothing
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (35, 23):
Unresolved reference: Flag
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (38, 2):
'getHelpMessage' overrides nothing
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (40, 2):
'getKeyWordRegex' overrides nothing
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (42, 2):
'instance' overrides nothing
:compileKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --
debug option to get more log output.

BUILD FAILED in 1s
1 actionable task: 1 executed
Compilation error. See log for more details
11:19:53: Task execution finished 'build'.

这些错误都与“未解析的引用”有关,而这些“引用”都是用 Scala 或 Java 编写的。

但是在 IDEA 中运行这个项目工作正常

我认为这是由于 Gradle 首先编译 Kotlin 造成的,而 Kotlin 应该在最后编译,所以找不到那些“引用”。

这是我的build.gradle:build.gradle

更新:

gradle clean testClasses --info 输出的一部分:

...SKIP...
> Task :compileKotlin
Using Kotlin incremental compilation

e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (3, 19):
Unresolved reference: Flag
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (11, 18):
Unresolved reference: GroupMessageResponder
...SKIP....

> Task :compileKotlin
[KOTLIN] deleting F:\Code\Project\Avalon\build\classes\kotlin\main on error
[KOTLIN] deleting F:\Code\Project\Avalon\build\classes\kotlin\main on error

:compileKotlin (Thread[Task worker Thread 3,5,main]) completed. Took 15.981 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option
to get more log output.

BUILD FAILED in 24s
2 actionable tasks: 2 executed
Stopped 0 worker daemon(s).

已发布完整输出 here .

最佳答案

您遇到的问题是不同的语言。

一些 Kotlin 和 Java

假设您只有 kotlin 和 java。您可以从以下位置访问(-> 表示 A 访问 B 的类)

kotlin -> java 
java -> kotlin

您可以这样做的原因是因为在编译 (compileKotlin) 期间,Kotlin 会处理此crossCompilation/jointCompilation/这两种语言之间的任何其他名称

<小时/>

Kotlin 和 Scala(单向)

但是如果你有这种情况:

kotlin -> scala

您必须考虑以下事项:当 compileKotlin 运行时,它会将所有 .java.kt 文件编译为 class 文件,但不编译 .scala 文件(因为它不了解 scala 的任何信息)。当您现在从 kotlin 访问 scala 类时,必须首先编译这些 .scala 类,以确保 compileKotlin 编译过程找到那些 .class 文件以成功编译。

您可以定义 scala 必须在 kotlin 之前运行,例如

compileKotlin.dependsOn compileScala
<小时/>

Kotlin 和 Scala(双向)

到目前为止一切都很好,但问题是,当你有

kotlin -> scala
scala -> kotlin

因为这个场景行不通。

您需要先编译 scala 类,才能成功编译 kotlin 类(请参阅上面的描述)。但另一方面,您需要编译 kotlin 类才能成功编译 scala 类。这是一个问题。

解决方案是,其中一种语言允许所有语言进行联合编译(但这永远不会发生)。

因此,对于两种 JVM 语言(两者都不是 Java),您必须决定允许哪个方向的访问。但您不能允许两个方向的访问。

在这种情况下,将逻辑放入 java 类中并访问此 java 类而不是例如scala 类。

问题也是一样的,例如groovyjava 和其他一些 jvm 语言,如帖子 https://discuss.gradle.org/t/kotlin-groovy-and-java-compilation/14903/10 中所示。

关于java - Kotlin、Scala 和 Java 的 Gradle 构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46536792/

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