gpt4 book ai didi

Gradle Kotlin DSL : Problems with subprojects and plugins

转载 作者:行者123 更新时间:2023-12-02 02:40:06 25 4
gpt4 key购买 nike

Gradle 6.1.1

我一直在尝试使用 Kotlin DSL 转换我的项目的 gradle 文件,但到目前为止失败了。我所有的项目都是 Java 中的多项目构建。
我跟着插件子项目示例here

它看起来像这样:

plugins {
idea
eclipse
}

subprojects {
apply(plugin = "java")

dependencies {
implementation("com.google.guava:guava:28.1-jre")
//...
}
}

子项目中似乎没有理解 java 插件,并且所有“实现”行都获得了 Unresolved 引用。

最佳答案

在此处查看文档 https://docs.gradle.org/current/userguide/kotlin_dsl.html .

Type-safe accessors are unavailable for model elements contributed by the following:

  • Plugins applied via the apply(plugin = "id") method
  • ...
 implementation()
是这样一个类型安全的访问器。非类型安全的方式如下所示:
    apply(plugin = "java-library")
dependencies {
"api"("javax.measure:unit-api:1.0")
"implementation"("tec.units:unit-ri:1.0.3")
}
使用 groovy DSL,所有方法都是动态解析的(不是类型安全的),所以没关系。
它有助于理解 build.gradle.kts 文件不是纯 kotlin 文件。如果顶部有大量进口商品,它们会看起来更丑陋。所以 gradle 运行时特别对待“buildscript”和“plugins” block 。 “插件”被转换为导入语句。这不适用于 apply() 方法,该方法稍后在编译文件时运行。这也是为什么 plugins block 不能在其他地方使用的原因,它是一个特殊的构造,只是伪装成一个普通的代码块。这里有更多细节
https://docs.gradle.org/current/dsl/org.gradle.plugin.use.PluginDependenciesSpec.html
建议
仅从模块设计的角度来看,我通常建议多模块构建中的根模块不知道子模块的作用,即使有很多人使用 subprojects。像您的示例一样阻止。让每个子模块的构建文件像一个独立的 gradle 项目一样完整,这样读者就不必阅读 2 个文件就可以了解全貌。
有更好的显式方式在子项目之间共享配置。 subprojects如果需要从项目的根目录 IMO 中添加其他任务,则最好使用根文件中的 block 来添加其他任务。不要注入(inject)插件或配置。

关于Gradle Kotlin DSL : Problems with subprojects and plugins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com