在Gradle示例(包含在2.2.1版本中)中,有一个java / multiproject项目。
settings.gradle
文件定义了以下项目:
包括"共享"," api","服务:webservice","服务:共享"
请注意,services
不本身就是一个项目,只是包含 webservice
和shared
项目的目录。< / p>
当我从根目录运行命令gradle build
时,我注意到在gradle成功构建之后,它会在/services
目录中创建一个包含/build
的{{1}}目录和一个/lib
个目录。
/tmp
内部是一个jar:/services/build/lib
,其中包含的很少;特别是只有services-1.0.jar
文件包含:
META-INF/MANIFEST.MF
那么是什么导致Gradle为这个非项目构建一个jar?如何在类似结构的多项目项目中防止此行为?
Manifest-Version: 1.0
provider: gradle
不是一个项目,我根本不想在/services
文件夹中创建任何内容。是的我可以删除它,但我想避免在这个非项目中构建这个jar /运行任何任务的不必要的工作。
答案 0 :(得分:4)
说实话,我不明白为什么gradle会构建这个文件夹。我想这是因为它是一种transient
文件夹。但是,可以通过将以下代码添加到主build.gradle
脚本来排除它:
project(':services').jar { onlyIf { false } }
使用以下services.jar
内容也可以获得所需效果(settings.gradle
消除):
include "shared", "api", "services/webservice", "services/shared"
文件而不是项目路径。
答案 1 :(得分:3)
我的猜测是,这是下两个gradle规则的组合:
根据Gradle文档here使用include
关键字在build.settings文件中包含子项目时:
包含路径'services:hotels:api'将导致 创建3个项目:'服务','服务:酒店'和 '服务:酒店API'。
简单来说,这意味着包含服务:: webservice也将构建服务项目
root中的bulid.gradle文件应用了'java'插件。根据Gradle Documentation here,root.gradle中定义的每个配置都对所有子项目生效。这意味着它也将作为服务项目的默认配置。随着'java'插件的应用,将创建一个jar,但由于services目录下没有src / main文件夹,因此不会编译任何内容,并且jar只包含一个META-INF/MANIFEST.MF
文件。