使用最新版本的gradle(8.5),我想编译Groovy code before Kotlin代码.这将使我能够使用自顶向下的方法将整个项目从Groovy迁移到Kotlin.(即,将一个控制器迁移到Kotlin,而底层依赖关系仍保留在Groovy中).

Kotlin Gradle插件似乎更新了任务要求,强制首先进行Kotlin编译.

  • Kotlin插件希望在compileJava之后发生
  • Groovy插件希望首先执行compileJava 因此,如果不触发编译器Kotlin来阻止我的目标,我就不能做一个编译器Groovy.

任务树输出:

:compileGroovy
\--- :compileJava
     \--- :compileKotlin
          \--- :checkKotlinGradlePluginConfigurationErrors

build.gradle年中使用的插件:

plugins {
    id 'groovy'
    id 'application'
    id 'org.jetbrains.kotlin.jvm' version '2.0.0-Beta2'
    id "com.dorongold.task-tree" version "2.1.1"
    id 'idea'
}

复制步骤:

  1. src/main/groovy中放置一个Groovy类文件(即作者)
  2. src/main/kotlin中放置一个依赖于该Groovy类的Kotlin类文件.(即,书)

其他研究笔记:

推荐答案

文档https://docs.gradle.org/current/userguide/building_java_projects.html#sub:compile_deps_jvm_lang的基本思想以及您发布的Gradle 6+ : compile groovy before kotlin中的解决方案保持不变.

您删除了groovy => java依赖项并添加了kotlin => groovy依赖项.

相关联的答案不是字面上有效的,与Gradle 6和Gradle 8没有任何关系.

您的问题是Kotlin Gradle plugin<;1.8与>;=1.8,因为在1.8中,不推荐使用的classpath属性最终出错,后来被删除,取而代之的是libraries.

因此,下面是与您的版本一起使用的配置版本Kotlin DSL代码片段:

tasks.compileGroovy {
    classpath = sourceSets.main.get().compileClasspath
}

tasks.compileKotlin {
    libraries.from(sourceSets.main.get().groovy.classesDirectory)
}

Kotlin相关问答推荐

在KMM合成多平台中创建特定于平台的视图

我如何测试一个可组合组件没有显示,但如果它不存在也接受?

编译后的JavaFX应用程序立即以静默方式崩溃

Kotlin:类型不匹配:推断的类型已运行,但应等待

Kotlin Poet 的导入不明确

try 一次性插入多条记录时,JOOQ连接为空错误

如何规避 Kotlin 的泛型类型差异约束

使用 Discord4j 交叉发布 Discord 消息

如何从 kotlin 函数中 Select 正确的枚举值

is return inside function definition 也是 kotlin 中的表达式

添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

如何使用 Android CameraX 自动对焦

Android 在将 androidx 生物识别更新为 1.0.0-alpha04 后崩溃

为什么 android studio 不为所有安全参数生成代码?

如何在 Kotlin 中使用 volatile

Kotlin 中的数据类

如何修复 ViewPager2 中的Design assumption violated错误?

如何在 kotlin 的片段类中更改 ActionBar 标题?

Mockito 的 argThat 在 Kotlin 中返回 null

Kotlin suspend fun