我的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文档/论坛上搜索,但没有受到任何影响。
有没有办法让gradle停止在根级别创建构建文件夹?
发布于 2018-09-28 13:31:18
谁负责build dir的创建?
马克·维埃拉是一个Gradle核心开发工具,只要它创建输出,每个任务都负责创建输出dir。
因此,基本上,您的根项目确实有一个build dir,这意味着它不是空的,有些东西是有意写入的。
在我的工作中,我管理一个由根项目组成的大型项目,它处理许多.gradle文件、设置文件等,并使用实际代码处理许多子项目。当我运行gradle clean build时,所有子项目都会使用libs、二进制文件等获得自己的build dir,但是根项目不会以任何build dir结束,因为没有任何任务在根build dir中写入输出。
我能做些什么来删除根build dir,不管创建它的任务是什么?
只需为根项目设置buildFinished钩子即可。
gradle.buildFinished {
project.buildDir.deleteDir()
}发布于 2021-11-29 21:15:24
我认为我有一个更正确的解决方案,而不必在创建后删除/build文件夹:)
正如我们所知道的,当我们将一些插件附加到我们的gradle项目中时,通常它会为gradle生命周期添加一些任务。所以您可以禁用创建/build文件夹的任务。
仅使用java插件,就可以禁用build和jar任务。
为此,请将以下行添加到根build.gradle文件:
jar.enabled = false
build.enabled = false如果您有一个org.springframework.boot插件,请禁用另外两个任务:
bootJar.enabled = false
bootJarMainClassName.enabled = falsehttps://stackoverflow.com/questions/51518039
复制相似问题