如何为自定义 detekt gradle 任务启用类型解析?
How to enable type resolution for custom detekt gradle task?
我有一个自定义 gradle 任务 运行 detekt
仅在作为参数传递的文件上。
tasks.register("detektCustom", io.gitlab.arturbosch.detekt.Detekt.class) { detektTask ->
detektTask.config.from("$rootDir/app/config/detekt/detekt.yml")
detektTask.jvmTarget = "1.8"
detektTask.classpath.setFrom(project.configurations.getByName("detekt"))
detektTask.reports {
txt {
enabled = true
destination = file("${project.buildDir}/reports/detekt/detekt.txt")
}
xml {
enabled = true
destination = file("${project.buildDir}/reports/detekt/detekt.xml")
}
html {
enabled = false
destination = file("${project.buildDir}/reports/detekt/detekt.html")
}
}
if (project.hasProperty("kotlinFiles")) {
def kotlinFiles = project.property("kotlinFiles")
def listOfFiles = kotlinFiles.split(",")
detektTask.source = files(listOfFiles)
}
}
但是使用类型解析的自定义检测规则不能正确处理此 gradle 任务。
我读到通过正确的 classpath
和 jvmTarget
应该有效。我在上面的 gradle 任务中遗漏了什么吗?
更新:
我找到了一种方法。在 detekt 任务配置中添加它。
对于 android 个模块:
def baseExtension = project.extensions.findByType(com.android.build.gradle.BaseExtension.class)
def bootClasspath = project.files(baseExtension.bootClasspath)
baseExtension.applicationVariants.all { variant ->
if (variant.name.contains("buildFlavorNameHere")) {
classpath.setFrom(variant.getCompileClasspath(null).filter { it.exists() } + bootClasspath)
}
}
对于库模块:
def baseExtension = project.extensions.findByType(com.android.build.gradle.BaseExtension.class)
def bootClasspath = project.files(baseExtension.bootClasspath)
baseExtension.libraryVariants.all { variant ->
if (variant.name.contains("buildFlavorNameHere")) {
classpath.setFrom(variant.getCompileClasspath(null).filter { it.exists() } + bootClasspath)
}
}
唯一的区别是 baseExtension.applicationVariants
与 baseExtension. libraryVariants
我有一个自定义 gradle 任务 运行 detekt
仅在作为参数传递的文件上。
tasks.register("detektCustom", io.gitlab.arturbosch.detekt.Detekt.class) { detektTask ->
detektTask.config.from("$rootDir/app/config/detekt/detekt.yml")
detektTask.jvmTarget = "1.8"
detektTask.classpath.setFrom(project.configurations.getByName("detekt"))
detektTask.reports {
txt {
enabled = true
destination = file("${project.buildDir}/reports/detekt/detekt.txt")
}
xml {
enabled = true
destination = file("${project.buildDir}/reports/detekt/detekt.xml")
}
html {
enabled = false
destination = file("${project.buildDir}/reports/detekt/detekt.html")
}
}
if (project.hasProperty("kotlinFiles")) {
def kotlinFiles = project.property("kotlinFiles")
def listOfFiles = kotlinFiles.split(",")
detektTask.source = files(listOfFiles)
}
}
但是使用类型解析的自定义检测规则不能正确处理此 gradle 任务。
我读到通过正确的 classpath
和 jvmTarget
应该有效。我在上面的 gradle 任务中遗漏了什么吗?
更新:
我找到了一种方法。在 detekt 任务配置中添加它。
对于 android 个模块:
def baseExtension = project.extensions.findByType(com.android.build.gradle.BaseExtension.class)
def bootClasspath = project.files(baseExtension.bootClasspath)
baseExtension.applicationVariants.all { variant ->
if (variant.name.contains("buildFlavorNameHere")) {
classpath.setFrom(variant.getCompileClasspath(null).filter { it.exists() } + bootClasspath)
}
}
对于库模块:
def baseExtension = project.extensions.findByType(com.android.build.gradle.BaseExtension.class)
def bootClasspath = project.files(baseExtension.bootClasspath)
baseExtension.libraryVariants.all { variant ->
if (variant.name.contains("buildFlavorNameHere")) {
classpath.setFrom(variant.getCompileClasspath(null).filter { it.exists() } + bootClasspath)
}
}
唯一的区别是 baseExtension.applicationVariants
与 baseExtension. libraryVariants