Gradle:如何获取项目的所有模块依赖项

时间:2018-07-18 13:06:05

标签: android gradle checkstyle gradle-plugin

我正在尝试编写一个在特定Android应用程序的所有源代码上运行Checkstyle的Gradle插件,包括该应用程序正在使用的所有变体和所有库模块,并生成一个没有重复错误的报告。目前,我能够在所有变体中成功运行它并生成没有重复的报告,但是我不知道如何获取应用程序正在使用的模块列表

因此,基本上,如果我有一个具有以下结构的项目:

MyProject
+-MyAppFoo
+-MyAppBar
+-FeatureA
+-FeatureB
+-FeatureC
+-Core

应用MyAppFoo依赖于模块FeatureAFeatureC,而FeatureA依赖于Core,我希望能够访问项目FeatureACoreFeatureC的实例以获取其源代码和类路径。

我当前的代码看起来像这样,我直接将其直接应用到项目的一个应用程序模块(例如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时,我希望在模块MyAppFooFeatureACoreFeatureC

0 个答案:

没有答案