如何让 Gradle 8+ 在 Kotlin 代码之前编译 Groovy 代码?并将它们混合在一个项目中?

问题描述 投票:0回答:1

使用最新版本的 gradle (8.5) 我想在 之前编译 Groovy 代码 Kotlin 代码。这将使我能够使用自上而下的方法“逐步”将整个项目从 Groovy 迁移到 Kotlin。 (即,将一个控制器迁移到 Kotlin,同时底层依赖项保留在 Groovy 中)。 Kotlin gradle 插件似乎更新了任务要求,强制首先进行 Kotlin 编译。

Kotlin 插件希望在
    compileJava
  •  之后发生
    
    Groovy 插件想要首先执行
  • compileJava
  • 因此,如果不触发compileKotlin,我就无法执行compileGroovy,这会阻止我实现上面的目标。
    
    
  • 任务树输出:

: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'
}

重现步骤:

将 Groovy 类文件放入
    src/main/groovy
  1. (即作者)
    将依赖于该 Groovy 类的 Kotlin 类文件放入 
  2. src/main/kotlin
  3. 中。 (即书)
    
    
  4. 其他研究笔记:

为早期 Gradle 版本提供的解决方案不再有效:
    Gradle 6+:在 kotlin 之前编译 groovy
  • (有一条关于“classpath”作为compileKotlin 的未知属性的错误消息) 这是另一种不起作用的方法:
  • 编译 Groovy 和 Kotlin?
  • 还有另一种方法不再有效:
  • Gradle Kotlin Dsl Build for a Kotlin Gradle Plugin,它依赖于同一项目中的 Groovy 类
kotlin gradle groovy migration
1个回答
0
投票
https://docs.gradle.org/current/userguide/building_java_projects.html#sub:compile_deps_jvm_lang

文档的基本思想,因此您发布的Gradle 6+:在 kotlin 之前编译 groovy 中的解决方案仍然是一样。 您删除

groovy => java

依赖项并添加

kotlin => groovy
依赖项。
链接的答案实际上不起作用,与 Gradle 6 与 Gradle 8 无关。

您的问题是 Kotlin Gradle Plugin

=1.8,如 1.8 中已弃用的

classpath<1.8 vs. > 属性最终出现错误,后来被删除,取而代之的是

libraries
这里是与您的版本兼容的配置版本,如 Kotlin DSL 片段:

tasks.compileGroovy { classpath = sourceSets.main.get().compileClasspath } tasks.compileKotlin { libraries.from(sourceSets.main.get().groovy.classesDirectory) }

© www.soinside.com 2019 - 2024. All rights reserved.