Gradle 指定默认扩展值的插件
Gradle plugin specifying default extension values
我计划编写自定义插件来包装几个代码质量 gradle 插件。逻辑很简单:使用这种自定义质量,我想为我们所有的项目强制执行 "default" 标准。另一方面,我希望所有包装的插件仍然是可定制的(例如,我想默认使用 "basic" 规则集设置 PMD 插件,但我绝对不想限制任何人添加额外的规则集).
级联扩展的推荐策略是什么?
- 我是否应该为所有插件执行 project.create({extension}) ,检查值是否已设置并设置为默认值(以及我如何区分默认值与插件扩展名以及由用户?)
- 我应该创建 myOwnExtension 并从此自定义插件设置包装插件扩展的值吗?
- 有没有其他方法可以自动做级联?
谢谢!
您可以应用一个使用 project.afterEvaluate
的插件,然后以编程方式查找插件,如果已应用,则检查 pmd
块并根据需要进行配置。如果未应用插件,则应用插件并设置块的默认值。
apply plugin: "groovy"
group = 'com.jbirdvegas.q41683529'
version = '0.1'
repositories {
jcenter()
}
class PmdWrapper implements Plugin<Project> {
@Override
void apply(Project target) {
target.afterEvaluate {
def pmdPlugin = target.plugins.findPlugin(PmdPlugin)
// check if the plugin is already applied if not apply it
if (!pmdPlugin) {
target.plugins.apply(PmdPlugin)
}
// get a reference to the extension and use it to manipulate the values
println target.pmd.ruleSets
setValues(target.pmd as PmdExtension)
println target.pmd.ruleSets
println "Now configured ruleSets: ${(target.pmd as PmdExtension).ruleSets}"
}
}
static setValues(PmdExtension pmd) {
// here you can set the values or add or manipulate as needed
if (!pmd.ruleSets.contains('basic') || !pmd.ruleSets.contains('braces')) {
pmd.ruleSets << "basic" << "braces"
}
// blah for other values
}
}
apply plugin: PmdWrapper
task nothing {}
然后就可以看到配置pmd插件的结果了
$ ./gradlew -b build_simple.gradle nothing -q
[java-basic]
[java-basic, basic, braces]
Now configured extension: [java-basic, basic, braces]
我计划编写自定义插件来包装几个代码质量 gradle 插件。逻辑很简单:使用这种自定义质量,我想为我们所有的项目强制执行 "default" 标准。另一方面,我希望所有包装的插件仍然是可定制的(例如,我想默认使用 "basic" 规则集设置 PMD 插件,但我绝对不想限制任何人添加额外的规则集).
级联扩展的推荐策略是什么?
- 我是否应该为所有插件执行 project.create({extension}) ,检查值是否已设置并设置为默认值(以及我如何区分默认值与插件扩展名以及由用户?)
- 我应该创建 myOwnExtension 并从此自定义插件设置包装插件扩展的值吗?
- 有没有其他方法可以自动做级联?
谢谢!
您可以应用一个使用 project.afterEvaluate
的插件,然后以编程方式查找插件,如果已应用,则检查 pmd
块并根据需要进行配置。如果未应用插件,则应用插件并设置块的默认值。
apply plugin: "groovy"
group = 'com.jbirdvegas.q41683529'
version = '0.1'
repositories {
jcenter()
}
class PmdWrapper implements Plugin<Project> {
@Override
void apply(Project target) {
target.afterEvaluate {
def pmdPlugin = target.plugins.findPlugin(PmdPlugin)
// check if the plugin is already applied if not apply it
if (!pmdPlugin) {
target.plugins.apply(PmdPlugin)
}
// get a reference to the extension and use it to manipulate the values
println target.pmd.ruleSets
setValues(target.pmd as PmdExtension)
println target.pmd.ruleSets
println "Now configured ruleSets: ${(target.pmd as PmdExtension).ruleSets}"
}
}
static setValues(PmdExtension pmd) {
// here you can set the values or add or manipulate as needed
if (!pmd.ruleSets.contains('basic') || !pmd.ruleSets.contains('braces')) {
pmd.ruleSets << "basic" << "braces"
}
// blah for other values
}
}
apply plugin: PmdWrapper
task nothing {}
然后就可以看到配置pmd插件的结果了
$ ./gradlew -b build_simple.gradle nothing -q
[java-basic]
[java-basic, basic, braces]
Now configured extension: [java-basic, basic, braces]