在 Gradle 插件中从 settings.gradle 访问 属性
Access property from settings.gradle in Gradle plugin
我正在使用 the following guide 构建自定义 Gradle 插件。我想在 settings.gradle
文件中定义一个 属性 并在插件 class 中读取它,但到目前为止每次尝试都失败了。
这是我收到的错误:
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"
此外,我推荐 this 教程而不是 Gradle 提供的教程。
我有一个 gradle 项目,其中 settings.gradle
中设置的 属性 从 3 个地方访问:
- settings.gradle本身
- build.gradle(包括
subprojects {}
)
- 一个gradle插件在./buildSrc
从 settings.gradle
和 build.gradle
访问:
gradle.ext.MY_PROPERTY_NAME
从 gradle plugin
的 apply() 方法访问:
(插件从 subprojects {}
关闭应用)
project.rootProject.gradle.ext.MY_PROPERTY_NAME
这似乎在 Gradle 4.7 和 Gradle 5.2
中工作正常
我正在使用 the following guide 构建自定义 Gradle 插件。我想在 settings.gradle
文件中定义一个 属性 并在插件 class 中读取它,但到目前为止每次尝试都失败了。
这是我收到的错误:
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"
此外,我推荐 this 教程而不是 Gradle 提供的教程。
我有一个 gradle 项目,其中 settings.gradle
中设置的 属性 从 3 个地方访问:
- settings.gradle本身
- build.gradle(包括
subprojects {}
) - 一个gradle插件在./buildSrc
从 settings.gradle
和 build.gradle
访问:
gradle.ext.MY_PROPERTY_NAME
从 gradle plugin
的 apply() 方法访问:
(插件从 subprojects {}
关闭应用)
project.rootProject.gradle.ext.MY_PROPERTY_NAME
这似乎在 Gradle 4.7 和 Gradle 5.2
中工作正常