将多项目gradle结构应用于我们的项目时,我的 settings.gradle 如下所示:
include "source:compA:api"
include "source:compA:core"
include "source:compB"
gradle项目给我
Root project 'tmp'
\--- Project ':source'
+--- Project ':source:compA'
| +--- Project ':source:compA:api'
| \--- Project ':source:compA:core'
\--- Project ':source:compB'
这正是目录结构!
在我的根目录中,我有一个 build.gradle ,它将java插件应用于所有子项目:
subprojects {
apply plugin: 'java'
}
构建时我最终有:source:compA 的工件,这些工件是空的,因为这实际上不是一个项目只是子目录 api 和 core 是正确的java项目。
避免出现空洞的最佳方法是什么?
答案 0 :(得分:17)
您可以尝试使用他们在Gradle's own settings.gradle文件中使用的技巧。请注意每个子项目如何位于'subprojects/${projectName}'
文件夹中,但subprojects
文件夹本身不是项目。
所以在你的情况下,你会做类似的事情:
include "source:compA-api"
include "source:compA-core"
include "source:compB"
project(':source:compA-api').projectDir = new File(settingsDir, 'source/compA/api')
project(':source:compA-core').projectDir = new File(settingsDir, 'source/compA/core')
我故意省略了compA
和api
之间的冒号,以确保source:compA
不会被评估为项目容器。
或者,您可以尝试将source:compA
项目排除在应用java
插件之后,执行以下操作:
def javaProjects() {
return subprojects.findAll { it.name != 'compA' }
}
configure(javaProjects()) {
apply plugin: 'java'
}
修改强> 或者你可以试试这样的东西(根据你的喜好调整):
def javaProjects() {
return subprojects.findAll { new File(it.projectDir, "src").exists() }
}
configure(javaProjects()) {
apply plugin: 'java'
}
答案 1 :(得分:0)
我有两种情况。空的父目录被视为项目。我们可以进行一些检查以忽略该项目。
project.getBuildFile().exists()