子项目中的java块在gradleKotlindsl中不工作

xggvc2p6  于 2023-08-06  发布在  Java
关注(0)|答案(1)|浏览(135)

我想把我所有的子项目的Java版本设置为17。
下面是我的主要项目的gradle文件-

group = "org.example"
version = "1.0-SNAPSHOT"

subprojects {
    apply(plugin = "java")
    repositories {
        mavenCentral()
        mavenLocal()
    }

    configure<JavaCompile> {
        targetCompatibility = JavaVersion.VERSION_17.toString()
        sourceCompatibility = JavaVersion.VERSION_17.toString()
    }

    java {
        toolchain {
            languageVersion.set(JavaLanguageVersion.of(17))
        }
    }
}

字符串
当我运行gradle clean build命令时,我得到以下错误-
% gradle clean build
配置项目:e:file:/Users/rnatarajan/Documents/Coding/others/org-example/build. gradle. kts:28:5:表达式“java”不能作为函数调用。未找到函数“invoke()”e:file:/Users/rnatarajan/Documents/Coding/others/org-example/build. gradle. kts:28:5:未解析的引用。由于接收器类型不匹配,以下候选项均不适用:public瓦尔PluginDependenciesSpec.java:PluginDependencySpec defined in org.gradle.Kotlin.dsl e:file:/Users/rnatarajan/Documents/Coding/others/org-example/build. gradle. kts:29:9:未解析参考:工具链e:文件:/Users/rnatarajan/Documents/Coding/others/org-example/build. gradle. kts:30:13:未解析参考:语言版本
FAILURE:生成失败,出现异常。
你知道如何修复这个错误吗?

hgncfbus

hgncfbus1#

不能对subprojects { }使用类型安全访问器。此外,您似乎正在根据您对configure<JavaCompile>的使用将Groovy DSL转换为Kotlin。您需要的内容如下:

subprojects {
    configure<JavaPluginExtension> {
        java {
            toolchain {
                languageVersion.set(JavaLanguageVersion.of(17))
            }
        }
    }
}

字符串
请注意,targetCompatibility/sourceCompatibility默认为工具链的任何配置。由于您将它们配置为与工具链相同,因此我在上面省略了它。
但是,如果您确实需要配置所有JavaCompile任务,则:

subprojects {
    configure<JavaPluginExtension> {
        java {
            toolchain {
                languageVersion.set(JavaLanguageVersion.of(17))
            }
        }
    }
    tasks.withType(JavaCompile::class).configureEach {
        // ...task configuration
    }
}

相关问题