在 Gradle 版本目录文件 libs.version.toml 中,插件名称无法识别

Atu*_*pta 9 android gradle

我正在使用版本目录来有效地共享 Android 项目中不同 Gradle 模块之间的依赖关系。

我正在使用下面的libs.versions.toml文件

[versions]
room = "2.4.0"
gradlePlugins-agp = "7.0.4"

# Gradle plugins
gradlePlugins-hilt = "2.40.5"

[libraries]
androidx-room-common = { module = "androidx.room:room-common", version.ref = "room" }
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }

hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "gradlePlugins-hilt" }
hilt-kapt = { module = "com.google.dagger:hilt-compiler", version.ref = "gradlePlugins-hilt" }
hilt-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "gradlePlugins-hilt" }

[plugins]
android-application = { id = "com.android.application", version.ref = "gradlePlugins-agp" }
Run Code Online (Sandbox Code Playgroud)

对于libs.versions.toml构建应用程序 Gradle 时的上述文件,构建失败并出现以下错误

org.gradle.api.InvalidUserDataException: Invalid TOML catalog definition:
  - Problem: In version catalog libs, unknown top level elements [plugins].

* Exception is:
java.lang.RuntimeException: org.gradle.api.InvalidUserDataException: Invalid TOML catalog definition:
  - Problem: In version catalog libs, unknown top level elements [plugins].
    
    Reason: TOML file contains an unexpected top-level element.
    
    Possible solution: Make sure the top-level elements of your TOML file is one of 'bundles', 'libraries', 'metadata' or 'versions'.
    
    Please refer to https://docs.gradle.org/7.0.2/userguide/version_catalog_problems.html#toml_syntax_error for more details about this problem.
Run Code Online (Sandbox Code Playgroud)

虽然文档明确说明了 toml 文件中支持的插件的顶级名称

Atu*_*pta 6

经过一番挖掘和探索一些开源项目后,我找到了上述问题的解决方案。最初,我使用的distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip是我的 Gradle 版本,gradle-wrapper.properties但为了解决这个问题,我将 Gradle 版本更新为7.3.2

因此更改分发 URL 来distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-all.zip解决我的问题

  • 确保您正在检查正确级别的“gradlew”版本。就像您在“file_path”处运行命令“./gradlew :app:assemble”一样,它会选择该路径中存在的 Gradle 包装器。但是,如果该模块存在于其他某个 gradle 项目中,那么如果该路径中不存在相同的模块,则将选择该 Gradle 包装器 (2认同)