Android 如何过滤gradle中的子模块以应用适当的插件?
我有一个多模块项目,其中一些是Java库,另一些是Android库。我想根据项目类型为我的子项目(模块)应用自定义插件,所以我在项目根目录的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文件中
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谢谢您的评论,我为问题添加了更多代码,可能会对您有所帮助。我看到了问题。请尝试我回答中描述的更改,这应该可以。因为它在项目下。在评估
结束后,我不知道我必须使用项目。应用
。谢谢你的帮助。