从Gradle插件中的settings.gradle访问属性

时间:2015-09-14 12:51:45

标签: gradle settings build.gradle

我正在使用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
        }
    }
}

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

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

2 个答案:

答案 0 :(得分:3)

显然,要走的路(无论如何更好)是使用扩展对象。此扩展对象允许将数据从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提供的教程。

答案 1 :(得分:0)

我有一个gradle项目,可以从3个地方访问async function returnsAPromise() { return Promise.resolve("Hello World"); } // this will log the result first. async function withAwait() { const result = await returnsAPromise(); console.log(result); console.log("rest of function"); } // this is equivalent to the function above, because of the way await works. function withEquivalentThen() { const result = returnsAPromise(); result.then(r => { console.log(r); console.log("rest of function"); }); } // this version logs "rest of function" first. function dontWaitForPromiseThen() { const result = returnsAPromise(); result.then(r => console.log(r)); console.log("rest of function"); } 中设置的属性:

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

subprojects {}settings.gradle访问:

build.gradle

通过gradle.ext.MY_PROPERTY_NAME的apply()方法进行访问:

(从gradle plugin闭包开始应用插件)

subprojects {}

这在Gradle 4.7和Gradle 5.2中似乎很好用