You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle复合构建+版本目录下无法识别`java`代码块问题

Gradle复合构建中java代码块无法识别的问题

问题描述

我正在搭建一个结合Gradle版本目录与复合构建的最小示例,基础配置已正常运行,但在build-logic模块的my.android-commons.gradle.kts构建逻辑插件中,Gradle无法识别java代码块。我已经在脚本中声明了java插件,却搞不懂为什么会出现这个问题。

项目文件结构

/root
- /app
- /core
- /feature

- /build-logic
--- /android-commons
---- /src/main/kotlin
----- my.android-commons.gradle.kts (5)
--- build.gradle.kts (4)
- settings.gradle.kts (3)

- /gradle
-- libs.versions.toml

- build.gradle.kts (2)
- settings.gradle.kts (1)

关键文件内容

(1) /root/settings.gradle.kts

// == 定义构建逻辑的位置 ==
pluginManagement {
    includeBuild("build-logic")
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

// == 定义组件的位置 ==
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
include("core")
include("feature")

// == 定义当前组件的内部结构 ==
rootProject.name = "Session Timer"
include("app")

(2) /root/build.gradle.kts

plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.android) apply false
    alias(libs.plugins.android.library) apply false
}

(3) /build-logic/settings.gradle.kts

dependencyResolutionManagement {
    repositories {
        gradlePluginPortal()
        google()
    }
    versionCatalogs {
        create("libs") {
            from(files("../gradle/libs.versions.toml"))
        }
    }
}

rootProject.name = "build-logic"
include("android-commons")

(4) /build-logic/android-commons/build.gradle.kts

plugins {
    `kotlin-dsl`
}

(5) /build-logic/android-commons/src/main/kotlin/my.android-commons.gradle.kts

plugins {
    id("java")
}

java { // Gradle无法识别此代码块
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

问题原因与解决方法

问题出在预编译脚本插件的依赖配置上:当你在build-logic模块中编写Kotlin DSL插件时,需要显式依赖java插件的API,这样Gradle才能识别java扩展块。

解决步骤

修改/build-logic/android-commons/build.gradle.kts,添加对Gradle Java插件API的依赖:

plugins {
    `kotlin-dsl`
}

dependencies {
    // 添加Gradle核心API依赖
    implementation(gradleApi())
    // 添加Java插件API依赖,让脚本能识别java代码块
    implementation(gradlePlugin("org.gradle.java"))
}

备选方案

也可以在my.android-commons.gradle.kts中显式导入JavaPluginExtension来辅助识别,但添加依赖是更规范的解决方式:

import org.gradle.api.plugins.JavaPluginExtension

plugins {
    id("java")
}

configure<JavaPluginExtension> {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

内容的提问来源于stack exchange,提问作者muetzenflo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:40:24