我正在使用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.gradle
中build.gradle
的内容并使用project.ext.set(...)
将其发送到插件,但有更直接的方法吗?
答案 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
)subprojects {}
和settings.gradle
访问: build.gradle
gradle.ext.MY_PROPERTY_NAME
的apply()方法进行访问:(从gradle plugin
闭包开始应用插件)
subprojects {}
这在Gradle 4.7和Gradle 5.2中似乎很好用