gradle:禁止在多项目应用程序的根目录下创建构建文件夹

时间:2018-07-25 11:43:02

标签: gradle build

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

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
    }
  }
}

gradle build之后,我得到了三个构建文件夹。一个在根目录,另一个在相应的子项目中。根项目只是一个没有任何源代码的空文件夹,它只是一个多项目容器。

现在,我不需要创建根构建文件夹,因为它没有用。我在网上和gradle docs / forum中搜索,但未获得任何成功。

有什么办法可以让gradle停止在根级别创建构建文件夹吗?

1 个答案:

答案 0 :(得分:3)

谁负责创建build目录?

According to Mark Vieira是Gradle的核心开发人员,每个任务只要创建输出,就负责创建输出目录。

因此,基本上,您的根项目确实有一个build目录,这意味着它不为空,并且有意在其中写入内容。

在我的工作中,我正在管理一个由根项目组成的大项目,该项目处理许多.gradle文件,设置文件等以及具有实际代码的许多子项目。当我运行gradle clean build时,所有子项目都会获得带有libs,binaries等的build目录,但根项目不会以任何build目录结尾,因为任何任务都不会在根build目录。

无论创建根目录build,我该怎么做?

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

gradle.buildFinished {
    project.buildDir.deleteDir()
}