Gradle多项目构建与空项目

时间:2012-06-22 07:32:53

标签: gradle

将多项目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项目。

避免出现空洞的最佳方法是什么?

2 个答案:

答案 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')

我故意省略了compAapi之间的冒号,以确保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()