Gradle:向子项目注入插件

5

我发现了一个名为 Gradle 插件,可以帮我处理带有点号的属性名称。当在单个项目中使用时,它可以像下面这样运行:

apply plugin: 'config'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.esyfur:gradle-config-plugin:0.4.+'
    }
}

task printProps() {
    println(config.grafana.url)
}

然而,我希望在多个项目(多模块)中使用此插件,并且理想情况下不希望在每个项目中重复初始化,而是通过某种方式进行注入,以便更易于管理。
我未能找到如何做或是否可以完成。例如,我尝试在父build.gradle中使用以下内容:
allprojects {
    apply plugin: 'config'
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.esyfur:gradle-config-plugin:0.4.+'
    }
}

但是它不起作用。Gradle抱怨在任务上找不到属性“config”。

更新

在Peter的评论后,我开始探索并从头创建一个示例项目,并逐步将其靠近我的“真实项目”。我在描述我的设置时并不完全准确。在settings.gradle中,我使用

rootProject.children.each { project ->
    project.buildFileName = "${project.name}.gradle"
} 

造成这个问题的原因是两个不同的构建脚本。当切换回build.gradle名称时,一切正常。


它的运行效果与您展示的完全一致。也许尝试使用不同的Gradle版本(我认为某个版本存在回归问题)。 - Peter Niederwieser
嗯,有趣。我使用Gradle Wrapper 2.0。但是你的评论让我思考并进行了更多的尝试...请查看更新后的问题。 - jojovilco
更新1不是通常向buildscript类路径添加插件的方法。更新2非常奇怪。也许尝试使用1.12或2.1夜间版本。 - Peter Niederwieser
我将删除更新1,以免让其他人感到困惑。至于更新2,我发现在1.10、2.0和2.2版本的每夜构建中存在错误。也许是我做错了什么?示例项目在这里:https://github.com/jojovilco/plugin-inject-test - jojovilco
1个回答

1
问题在于你的 settings.gradle 没有配置 rootProject.buildFileName 以匹配用于构建脚本的非标准文件名。因此,构建脚本不会被评估,其 buildscript 块永远不会生效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接