我有一个gradle项目,它包含java应用程序以及android应用程序。
root/
build.gradle
settings.gradle
java1/
java2/
android1/
android2/
java3/
等。
构建构建脚本的最佳做法是什么?我是一个完全的gradle新手,我正在将项目从maven迁移到gradle。
我想做点什么而不是
configure(subprojects) {}
应用插件和其他特定的东西。
,例如
configure(java1, java2, java3) { // java specifics }
configure(android1, android2) { // android specifics }
我可能是以错误的方式接近这个。
更明确地说,我需要为java项目应用插件java,为android项目安装android插件。
答案 0 :(得分:12)
configure(subprojects.findAll {it.name == "java1" && it.name == "java2"}) {
Under the filtering section in the guide
希望这有助于其他人。
答案 1 :(得分:7)
有多种方法,取决于你想要的......一些例子:
// Configures just project java1
project(":java1") { ... }
// Configures projects java1 and java2
["java1","java2"].each { name ->
project(":$name") { ... }
}
您可以使用普通的groovy来查找/遍历所有项目。
答案 2 :(得分:4)
另一种选择:
configure([ project(':sub1'), project(':sub2'), ... ]) {
...
}
答案 3 :(得分:0)
最短且最简单的选择:
configure(subprojects.findAll()) {
if (it.name.equals('MY_PROJECT')) {
...
} else {
...
}
}
答案 4 :(得分:0)
另一种方法......
在settings.gradle中,您可以像这样定义项目:
gradle.ext.javaProjects=[]
gradle.ext.androidProjects=[]
javaProject('java1')
javaProject('java2')
javaProject('java3')
androidProject('android1')
androidProject('android2')
def javaProject(String name) {
gradle.ext.javaProjects.add(name)
include ":$name"
}
def androidProject(String name) {
gradle.ext.androidProjects.add(name)
include ":$name"
}
现在您可以在root build.gradle中引用它们:
def javaProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)};
def androidProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)};
configure(javaProjects) {
...
}
configure(androidProjects) {
...
}
也许那太过分了......但我通常在我的settings.gradle中有项目定义方法。例如。如果你想把所有java项目放在一个java文件夹下,你可以定义这样的东西:
def javaProject(String name) {
gradle.ext.javaProjects.add(name)
include ":$name"
project(":$name").projectDir = file('java/'+ name)
}