【问题标题】:Access property from settings.gradle in Gradle plugin从 Gradle 插件中的 settings.gradle 访问属性
【发布时间】:2015-09-14 12:51:44
【问题描述】:

我正在使用 the following guide 构建自定义 Gradle 插件。我想在settings.gradle 文件中定义一个属性并在插件类中读取它,但是到目前为止每次尝试都失败了。

这是我得到的错误:

Could not find property 'MyProperty' on root Project 'MyProject'

这是我的settings.gradle 文件:

gradle.ext.MyProperty = "The Value"

这是包含我的插件的文件:

package myplugin.gradle

import org.gradle.api.Project
import org.gradle.api.Plugin

class FirstPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.task('myTask') << {
            def instance = project.MyProperty
            println "VALUE : " + instance
        }
    }
}

如果我将project.ext.set("MyProperty", "Property Value") 放入build.gradle,我可以访问MyProperty,但我找不到在settings.gradle 文件中设置它的方法。

我想解决此问题的一种方法是读取build.gradlesettings.gradle 的内容并使用project.ext.set(...) 将其发送到插件,但有没有更直接的方法?

【问题讨论】:

    标签: gradle settings build.gradle


    【解决方案1】:

    显然,要走的路(无论如何更好)是使用扩展对象。此扩展对象允许将数据从build.gradle 文件发送到插件。 build.gradle文件读取settings.gradle文件中变量的内容,放入扩展对象中。

    在包含插件的文件中:

    package myplugin.gradle
    
    import org.gradle.api.Project
    import org.gradle.api.Plugin
    
    class MyExtension {
        String myProperty
    }
    
    class FirstPlugin implements Plugin<Project> {
        void apply(Project project) {
            project.extensions.create('myExtensionName', MyExtension)
            project.task('myTask') << {
                def instance = project.myExtensionName.myProperty
                println "VALUE : " + instance
            }
        }
    }
    

    build.gradle 文件中:

    apply plugin: 'myPluginName'
    ...
    
    myExtensionName {
        myProperty = gradle.ext.myPropertyInSettings
    }
    

    最后,在settings.gradle 文件中:

    gradle.ext.myPropertyInSettings = "The Value"
    

    另外,我推荐 this 教程而不是 Gradle 提供的教程。

    【讨论】:

      【解决方案2】:

      我有一个 gradle 项目,其中在 settings.gradle 中设置的属性可以从 3 个地方访问:

      • settings.gradle 本身
      • build.gradle(包括subprojects {}
      • ./buildSrc 中的 gradle 插件

      settings.gradlebuild.gradle 访问:

      gradle.ext.MY_PROPERTY_NAME

      gradle plugin 的 apply() 方法访问:

      (插件从subprojects {}闭包应用)

      project.rootProject.gradle.ext.MY_PROPERTY_NAME

      这似乎在 Gradle 4.7 和 Gradle 5.2 中运行良好

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多