【发布时间】:2019-02-06 04:46:15
【问题描述】:
我有一个多模块项目,其中一些是 Java 库,另一些是 Android 库。我想根据项目类型为我的子项目(模块)应用自定义插件,所以我在项目根的build.gradle 文件中做了类似的事情(见下面的代码 sn-p)。此设置有效,但我想知道是否有其他方法可以做到这一点。 Gradle 建议 Filtering by properties 但如果我尝试这样做,我会收到错误 Cannot add task 'integTest' as a task with that name already exists。 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'。
【问题讨论】:
-
您得到的错误表明您将
customJavaBuild.gradle和customAndroidBuild.gradle应用到同一个子项目,由于任务integTest名称冲突,这是不允许的。您可以根据“按属性过滤”分享您的解决方案吗? (至少你在根项目脚本中实现的逻辑,以及你如何在每个子项目中实现属性来确定项目类型) -
@M.Ricciuti 感谢您的评论,我已在问题中添加了更多可能对您有所帮助的代码。
-
我看到了问题。请尝试我的答案中描述的更改,这应该可以。
标签: android gradle android-gradle-plugin build.gradle