Gradle多项目构建与空项目

Vol*_*erK 15 gradle

将多项目gradle结构应用于项目时,我的settings.gradle如下所示:

include "source:compA:api"
include "source:compA:core"
include "source:compB"
Run Code Online (Sandbox Code Playgroud)

gradle项目给了我

Root project 'tmp'
\--- Project ':source'
     +--- Project ':source:compA'
     |    +--- Project ':source:compA:api'
     |    \--- Project ':source:compA:core'
     \--- Project ':source:compB'
Run Code Online (Sandbox Code Playgroud)

这正是目录结构!
在我的根目录中,我有一个build.gradle,它将java插件应用于所有子项目:

subprojects {
    apply plugin: 'java'
}
Run Code Online (Sandbox Code Playgroud)

构建时我最终得到了工件:source:compA是空的,因为这实际上不是一个项目,只是子目录apicore是正确的java项目.

什么是避免空洞人工制品的最佳方法?

rod*_*ion 18

您可以尝试使用他们在Gradle自己的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')
Run Code Online (Sandbox Code Playgroud)

我故意省略了之间的冒号compAapi确保source:compA不会将其评估为项目容器.

或者,您可以尝试通过执行以下操作来排除source:compA项目的java插件:

def javaProjects() { 
  return subprojects.findAll { it.name != 'compA' }
} 

configure(javaProjects()) { 
  apply plugin: 'java' 
} 
Run Code Online (Sandbox Code Playgroud)

编辑: 或者您可以尝试这样的事情(根据您的喜好调整):

def javaProjects() { 
  return subprojects.findAll { new File(it.projectDir, "src").exists() }
} 

configure(javaProjects()) { 
  apply plugin: 'java' 
} 
Run Code Online (Sandbox Code Playgroud)