首页 文章

在gradle构建脚本中将配置应用于特定项目

提问于
浏览
10

我有一个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项目 .

5 回答

  • 12

    有多种方法,取决于你想要的......一些例子:

    // Configures just project java1
    project(":java1") { ... }
    
    // Configures projects java1 and java2
    ["java1","java2"].each { name ->
      project(":$name") { ... }
    }
    

    您可以使用普通的groovy来查找/迭代所有项目 .

  • 4
    configure(subprojects.findAll {it.name == "java1" && it.name == "java2"}) {
    

    Under the filtering section in the guide

    希望这有助于其他人 .

  • 7

    另外一个选项:

    configure([ project(':sub1'), project(':sub2'), ... ]) {
        ...
    }
    
  • 0

    最短最简单的选择:

    configure(subprojects.findAll()) {
       if (it.name.equals('MY_PROJECT')) {
         ...
       } else {
         ...
       }
    }
    
  • 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)
    }
    

相关问题