Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从gradle插件中的settings.gradle访问属性_Gradle_Settings_Build.gradle - Fatal编程技术网

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

从gradle插件中的settings.gradle访问属性,gradle,settings,build.gradle,Gradle,Settings,Build.gradle,我正在使用构建一个定制的Gradle插件。我想在settings.gradle文件中定义一个属性,并在plugin类中读取它,但到目前为止每次尝试都失败了 以下是我得到的错误: Could not find property 'MyProperty' on root Project 'MyProject' 这是我的设置.gradle文件: gradle.ext.MyProperty = "The Value" apply plugin: 'myPluginName' ... myExten

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

以下是我得到的错误:

Could not find property 'MyProperty' on root Project 'MyProject'
这是我的
设置.gradle
文件:

gradle.ext.MyProperty = "The Value"
apply plugin: 'myPluginName'
...

myExtensionName {
    myProperty = gradle.ext.myPropertyInSettings
}
下面是包含我的插件的文件:

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
        }
    }
}
包myplugin.gradle
导入org.gradle.api.Project
导入org.gradle.api.Plugin
类FirstPlugin实现插件{
无效申请(项目){
project.task('myTask')显然,该走的路(哪一条更好)是使用扩展对象。此扩展对象允许将数据从
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
        }
    }
}
最后,在
设置.gradle
文件中:

gradle.ext.myPropertyInSettings = "The Value"

此外,我建议使用教程,而不是Gradle提供的教程。

我有一个Gradle项目,在该项目中,
设置中设置的属性可从3个位置访问:

  • 格雷德尔本身
  • build.gradle(包括
    子项目{}
  • ./buildSrc中的gradle插件
settings.gradle
build.gradle
访问:
gradle.ext.MY_PROPERTY_NAME

gradle插件的apply()方法访问:
(插件应用于
子项目{}
闭包)

project.rootProject.gradle.ext.MY\u属性\u名称

在Gradle 4.7和Gradle 5.2中,这似乎工作得很好