gradle:在多项目应用程序中禁止在root用户创建构建文件夹

MKB*_*MKB 7 build gradle

我的gradle项目是一个multi-project结构.它由两个子项目组成.我build.gradle的root项目如下:

allprojects {
  apply plugin: 'eclipse'
}

subprojects {
  apply plugin: 'java'
  apply plugin: 'maven-publish'

  publishing {
    repositories {
      maven {
        name 'myMaven'
        def suffix = project.version.endsWith("SNAPSHOT") ? "snapshots" : "releases"
        url baseUrl + suffix
      }
    }

    publications {
      core(MavenPublication) {
        artifactId project.name
        artifact jar
      }
    }
  }
}

project(':projectA') {
  ext {
    sharedManifest = manifest {
      attributes("Implementation-Title": project.name,
                 "Implementation-Version": 1.0 )
    }
  }
  jar {
    manifest = project.manifest {
      from sharedManifest
    }
  }
}

project('projectB') {
  ext {
    sharedManifest = manifest {
      attributes("Implementation-Title": project.name,
                 "Implementation-Version": 2.0 )
    }
  }
  jar {
    manifest = project.manifest {
      from sharedManifest
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

之后gradle build,我有三个构建文件夹.一个位于根目录,另外两个位于各个子项目中.根项目只是一个没有任何源代码的空文件夹,它只是一个多项目容器.

现在我需要消除根构建文件夹的创建,因为它没用.我在网上和gradle文档/论坛中搜索,但没有得到任何打击.

是否有任何方法可以让gradle停止在根级别创建构建文件夹?

ToY*_*nos 9

谁负责build创建目录?

根据Gradle 核心开发人员 Mark Vieira 的说法,只要创建输出,每个任务都负责创建输出目录。

所以基本上,你的根项目确实有一个build目录,这意味着它不是空的,并且有一些东西是故意写入的。

在我的工作中,我正在管理一个由根项目构成的大项目,该项目处理许多.gradle文件、设置文件等以及许多带有实际代码的子项目。当我运行时gradle clean build,所有子项目都build使用库、二进制文件等获得自己的目录,但根项目最终build没有任何目录,因为没有任何任务在根build目录中写入输出。

我能做些什么来删除根build目录,无论创建它的任务是什么?

只为根项目设置一个buildFinished钩子

gradle.buildFinished {
    project.buildDir.deleteDir()
}
Run Code Online (Sandbox Code Playgroud)