首页 文章

Gradle多项目构建与空项目

提问于
浏览
11

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

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

1 回答

  • 15

    您可以尝试使用他们在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 项目的 source:compA 插件:

    def javaProjects() { 
      return subprojects.findAll { it.name != 'compA' }
    } 
    
    configure(javaProjects()) { 
      apply plugin: 'java' 
    }
    

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

    def javaProjects() { 
      return subprojects.findAll { new File(it.projectDir, "src").exists() }
    } 
    
    configure(javaProjects()) { 
      apply plugin: 'java' 
    }
    

相关问题