Android 如何过滤gradle中的子模块以应用适当的插件?

Android 如何过滤gradle中的子模块以应用适当的插件?,android,gradle,android-gradle-plugin,build.gradle,Android,Gradle,Android Gradle Plugin,Build.gradle,我有一个多模块项目,其中一些是Java库,另一些是Android库。我想根据项目类型为我的子项目(模块)应用自定义插件,所以我在项目根目录的build.gradle文件中做了类似的事情(请参见下面的代码片段)。此设置正在运行,但我想知道是否有其他方法可以完成此设置。Gradle建议,但我得到了一个错误无法添加任务“integTest”,因为如果我尝试添加,具有该名称的任务已经存在。集成测试是我在customJavaBuild.gradle和customAndroidBuild.gradle文件中

我有一个多模块项目,其中一些是Java库,另一些是Android库。我想根据项目类型为我的子项目(模块)应用自定义插件,所以我在项目根目录的
build.gradle
文件中做了类似的事情(请参见下面的代码片段)。此设置正在运行,但我想知道是否有其他方法可以完成此设置。Gradle建议,但我得到了一个错误
无法添加任务“integTest”,因为如果我尝试添加,具有该名称的任务已经存在。集成测试是我在
customJavaBuild.gradle
customAndroidBuild.gradle
文件中创建的任务。感谢您的帮助。谢谢

def javaLibraries = ["projA", "projB"]
def androidLibraries = ["projC"]

subprojects {
    if (javaLibraries.contains(it.name)) {
        apply from: '$rootDir/gradle/customJavaBuild.gradle'
    } else if (androidLibraries.contains(it.name)) {
        apply from: '$rootDir/gradle/customAndroidBuild.gradle'
    } else {
        //Apply custom plugin for some other project type.
    }
} 
按属性筛选

subprojects {
    project.ext {
        projectType = null
    }

    project.afterEvaluate {
        if (project.ext.projectType == 'jar') {
            apply from: '$rootDir/gradle/customJavaBuild.gradle'
        } else if (project.ext.projectType == 'aar') {
            apply from: '$rootDir/gradle/customAndroidBuild.gradle'
        } else {
            //Apply custom plugin for some other project type.
        }
    }
}

在我的子模块(projA、projB、projC)
build.gradle
文件中,我有一个额外的属性
ext.projectType='jar'

问题是在
项目中。在evaluate
块之后,您将自定义gradle脚本应用于
根项目,而不是应用于被评估的
子项目,这会导致已定义的
integTest
任务出错

您应该重写
项目。在使用类似于以下内容的内容评估
块后:

subprojects {
    project.ext {
        projectType = null
    }

    project.afterEvaluate {
        if (project.ext.projectType == 'jar') {
            // WARNING : use "project.apply ..." instead of "apply ..." here
            project.apply from : "$rootDir/gradle/customJavaBuild.gradle"
        } else if (project.ext.projectType == 'aar') {
            project.apply from : "$rootDir/gradle/customAndroidBuild.gradle"
        } else {
            // nothing
        }
    }

}

您得到的错误表明您将
customJavaBuild.gradle
customAndroidBuild.gradle
应用于同一子项目,由于任务
integTest
名称冲突,这是不允许的。您能否共享基于“按属性筛选”的解决方案?(至少是您在根项目脚本中实现的逻辑,以及您如何在每个子项目中实现属性以确定项目类型)@M.Ricciuti谢谢您的评论,我为问题添加了更多代码,可能会对您有所帮助。我看到了问题。请尝试我回答中描述的更改,这应该可以。因为它在
项目下。在评估
结束后,我不知道我必须使用
项目。应用
。谢谢你的帮助。