我正在尝试编写一个在特定Android应用程序的所有源代码上运行Checkstyle的Gradle插件,包括该应用程序正在使用的所有变体和所有库模块,并生成一个没有重复错误的报告。目前,我能够在所有变体中成功运行它并生成没有重复的报告,但是我不知道如何获取应用程序正在使用的模块列表。
因此,基本上,如果我有一个具有以下结构的项目:
MyProject
+-MyAppFoo
+-MyAppBar
+-FeatureA
+-FeatureB
+-FeatureC
+-Core
应用MyAppFoo
依赖于模块FeatureA
和FeatureC
,而FeatureA
依赖于Core
,我希望能够访问项目FeatureA
,Core
和FeatureC
的实例以获取其源代码和类路径。
我当前的代码看起来像这样,我直接将其直接应用到项目的一个应用程序模块(例如MyAppFoo
):
apply plugin: 'checkstyle'
afterEvaluate {
def variants
if (project.plugins.hasPlugin('com.android.application')) {
variants = android.applicationVariants
} else if (project.plugins.hasPlugin('com.android.library')) {
variants = android.libraryVariants
} else {
return
}
def dependsOn = []
def classpath
def source
variants.all { variant ->
dependsOn << variant.javaCompiler
if (!source) {
source = variant.javaCompiler.source.filter { p ->
return p.getPath().contains("${project.projectDir}/src/main/")
}
}
source += variant.javaCompiler.source.filter { p ->
return !p.getPath().contains("${project.projectDir}/src/main/")
}
if (!classpath) {
classpath = project.fileTree(variant.javaCompiler.destinationDir)
} else {
classpath += project.fileTree(variant.javaCompiler.destinationDir)
}
}
def checkstyle = project.tasks.create "checkstyle", Checkstyle
checkstyle.group = "Verification"
checkstyle.dependsOn dependsOn
checkstyle.source source
checkstyle.classpath = classpath
checkstyle.exclude('**/BuildConfig.java')
checkstyle.exclude('**/R.java')
checkstyle.exclude('**/BR.java')
checkstyle.showViolations true
project.tasks.getByName("check").dependsOn checkstyle
}
我想拥有一个project
列表,其中仅包含我的MyAppFoo
正在使用的模块,当我运行gradle :MyAppFoo:checkstyle
时,我希望在模块MyAppFoo
,FeatureA
,Core
和FeatureC
。