gpt4 book ai didi

android - 配置了 pmd、checkstyle 和 findbugs 的自定义 gradle 插件

转载 作者:行者123 更新时间:2023-11-29 01:25:32 31 4
gpt4 key购买 nike

感谢您的建议,在文档中说:

TextResource ruleSetConfig

Note: This property is incubating and may change in a future version of Gradle.
The custom rule set to be used (if any). Replaces ruleSetFiles, except that it does not currently support multiple rule sets. See the official documentation for how to author a rule set. Example: ruleSetConfig = resources.text.fromFile(resources.file("config/pmd/myRuleSets.xml"))

但如果我尝试

setRuleSetConfig(project.resources.text.fromFile(project.resources.file("pmd.xml")))

它说:

Caused by: groovy.lang.MissingMethodException: No signature of method: org.gradle.api.internal.resources.DefaultResourceHandler.file() is applicable for argument types: (java.lang.String) values: [pmd.xml]
Possible solutions: find(), find(groovy.lang.Closure), use([Ljava.lang.Object;), is(java.lang.Object), with(groovy.lang.Closure), wait()
at com.barista_v.android_quality.MyPmdTask.<init>(MyPmdTask.groovy:20)
at com.barista_v.android_quality.MyPmdTask_Decorated.<init>(Unknown Source)
at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:48)
at org.gradle.api.internal.ClassGeneratorBackedInstantiator.newInstance(ClassGeneratorBackedInstantiator.java:36)
at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:121)
... 82 more

我也在尝试这种方式::微笑:

class MyPmdTask extends Pmd {

MyPmdTask() {
project.extensions.pmd.with {
reportsDir = project.file("$project.buildDir/outputs/")
}

source = project.fileTree('src/main/java').toList()
ruleSets = []
reports {
xml.enabled = false
html.enabled = true
}

setIgnoreFailures(true)
setRuleSetConfig(ResourceUtils.readTextResource(project, getClass().getClassLoader(), "pmd.xml"))
}
}


class ResourceUtils {
static TextResource readTextResource(Project project, ClassLoader classLoader, String fileName) {
println "reading config file $fileName"
def inputStream = classLoader.getResourceAsStream(fileName)
project.resources.text.fromString inputStream.text
}
}

它设置了配置文件但它不使用我的规则,不崩溃但不使用我的规则。我尝试在

中设置
    project.extensions.pmd.with {
// HERE
}

当我尝试 getRuleSetConfig() 时,它返回 null 但 setRuleSetConfig() 似乎已设置但未使用。

我不想为这里的配置创建另一个仓库 https://github.com/MovingBlocks/TeraConfig .

相关:https://discuss.gradle.org/t/how-can-i-read-setup-resources-from-plugin-jar/13274/4

我能做什么?

最佳答案

我能够创建一个自定义插件来添加内置类型的 PMD 任务,使用打包在插件的 src/main/resources 目录中的自定义规则集;我正在使用 kotlin,但你可能会明白这个想法:

class BuildPlugin: Plugin<Project> {
override fun apply(project: Project) {
val android = project.extensions.getByType(BaseExtension::class.java)
project.pluginManager.apply(PmdPlugin::class.java)
project.extensions.getByType(PmdExtension::class.java).toolVersion = "5.5.2"
project.tasks.register("pmd", Pmd::class.java) {
it.source(android.sourceSets.getByName("main").java.sourceFiles,
android.sourceSets.getByName("test").java.sourceFiles,
android.sourceSets.getByName("androidTest").java.sourceFiles)
it.ruleSetConfig = project.resources.text.fromUri(javaClass.classLoader.getResource("config/pmd.xml"))
}
}
}

它仍在进行中(例如,我不确定在我的 apply 中直接解析 android 扩展是否有影响),但它似乎按预期使用了我的规则集!

关于android - 配置了 pmd、checkstyle 和 findbugs 的自定义 gradle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298406/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com