如何防止Gradle构建非项目目录?

时间:2015-03-10 18:27:43

标签: gradle

在Gradle示例(包含在2.2.1版本中)中,有一个java / multiproject项目。

settings.gradle文件定义了以下项目:

  

包括"共享"," api","服务:webservice","服务:共享"

请注意,services 本身就是一个项目,只是包含 webserviceshared项目的目录。< / 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 /运行任何任务的不必要的工作。

2 个答案:

答案 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规则的组合:

  1. 根据Gradle文档here使用include关键字在build.settings文件中包含子项目时:

      

    包含路径'services:hotels:api'将导致   创建3个项目:'服务','服务:酒店'和   '服务:酒店API'。

    简单来说,这意味着包含服务:: webservice也将构建服务项目

  2. root中的bulid.gradle文件应用了'java'插件。根据Gradle Documentation here,root.gradle中定义的每个配置都对所有子项目生效。这意味着它也将作为服务项目的默认配置。随着'java'插件的应用,将创建一个jar,但由于services目录下没有src / main文件夹,因此不会编译任何内容,并且jar只包含一个META-INF/MANIFEST.MF文件。

    < / LI>