设置中的访问属性.gradle插件中的gradle



我正在使用以下指南构建自定义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.gradle中阅读settings.gradle的内容,并使用project.ext.set(...)将其发送到插件,但是否有更直接的方法?

显然,最好的方法是使用扩展对象。这个扩展对象允许从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"

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

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

  • 设置。gradle本身
  • 构建。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中似乎工作得很好

最新更新