我如何获得一个项目将使用的gradle插件列表



我想在Gradle的插件块中获得插件列表。"Project.plugins"不会得到我想要的。通过实验,我发现"project .plugins"是已经在项目中应用的插件集。我想要的是在gradle中定义的一组声明式插件。无论插件是否已经应用,都要构建脚本。例如,我有一个构建。Gradle脚本带有"plugins"块。我添加到块中的第一个插件是"my.custom.plugin"当它被应用时,为了诊断目的,它会在"project .plugins"中打印插件列表。我得到的打印列表包含以下插件:HelpTasksPlugin, BuildInitPlugin和WrapperPlugin。下面是构建的内容。Gradle脚本如下:

plugins{
id("my.custom.plugin")
id("com.android.application")
}

我希望插件"com.android.application"应该在那个名单上。既然不是,这就是为什么我说"project .plugins"。是应用插件的列表。"My.custom.plugin"也不在列表中,我猜这是因为插件正在被应用的过程中,但还没有完成应用。

我希望在"my.custom.plugin"就是看看项目是否包含com.android.application"插件,我会做一些特殊的处理,如配置android的AppExtension。所以我的问题是:有没有一种方法可以让我得到所有插件的id在"插件"中;Block,插件是否还没有被应用?那么为什么不应用com.android。application"在应用"my.custom.plugin"之前?简而言之,我还发现application。com。android。application。没有任何安卓系统;构建中的AppExtension。gradle失败了,因为它想知道compileSdkVersion,但是直到"my.custom。

我相信你真正想做的是在你的插件中创建一个beforeEvaluate { }钩子,它将在插件被应用之后执行,但在Gradle解析所有引用之前,给你一个机会在任务执行之前更改任何设置或设置。

class MyCustomPlugin implements Plugin<Project> {
void apply(Project project) {
project.beforeEvaluate {
if (project.getPluginManager().hasPlugin("com.android.application")) {
throw new GradleException("com.android.application already applied");
} else {
// Do your plugin setup here
project.getPluginManager().apply("com.android.application");    
}
}
}
}

最新更新