文档章节

Idea 配合 Gradle 多项目管理

郁也风
 郁也风
发布于 2015/07/05 19:11
字数 786
阅读 5844
收藏 29

缘起

之前一直用的是 eclipse,几次(差不多有 3、4 次吧)想切换到 idea 这个传说中的 IDE,不过一直被 Gradle 设置给打了回来。

这次干活干累了决定配置一下 idea 权当休闲,经过一番翻箱倒柜,终于达到了自己满意的效果。

Gradle 配合 Idea Module

先说一下我的项目结构,项目根目录下只是一些 gradle 相关的配置文件,几个子项目位于 projects 目录下,并且 B 项目依赖 A,C 项目依赖 A 和 B。

在 idea 中新建项目(采用直接打开 build.gradle 模式)的时候,总是会把根目录和 projects 目录都作为 module 呈现。

当然,这个作为 idea 并无过错,因为 gradle 的理念如此。但不合我的理念。

放狗找了半天之后发现解决办法:

在根目录下的 build.gradle 的尾部增加如下代码:

// 在idea 的 module 中忽略 projects 目录
project("projects") {
    ideaModule.enabled = false
}


/**
 * idea 里面忽略根项目,也就是说不将根项目设置为 module
 */
gradle.projectsEvaluated {
    gradle.rootProject {
        ideaModule.enabled = false
        idea {
            project {
                // modules = subprojects*.idea.module
                // 如果某个子项目的 ideaModule 设置为 false,则不会在 idea 中生成 module
                def modulesToInclude = subprojects.findAll {it.ideaModule.enabled == true}
                modules = modulesToInclude.idea.module
            }
        }
    }
}

效果如下图所示: 项目效果

多 resources 目录设置

另外一个问题是我的 web 项目里面 main/resources 是分为 3 个目录的:

  • resources: 通用设置,所有人一个样
  • resources-dev: 开发环境设置文件,每个开发人员可能都有所区别
  • resource-prod: 生产环境下配置文件

打包的时候根据不同的命令来将不同目录打入 war 包。

一开始用 Idea 打开项目的时候我时手工在 module 里面设置 resources-dev 的,结果编译的时候发现此目录死活没有发布出去。

Module 设置

后来才发现需要在 gradle 设置里面明确指定此目录:

//
// 设置默认 resources 为开发环境状态
//
// 这儿如果不设置的话,idea 编译时只会默认获取 resources 目录
//
sourceSets {
    main {

        resources {
            srcDirs = ['src/main/resources', 'src/main/resources-dev']
        }
    }
}

Excluded 文件夹

一般项目下往往会有些不希望 IDE 处理的文件夹(例如 node_modules),在项目设置里面可以在 Module 里面 Excluded 这些文件夹,但是 gradle 一刷新,这些手工设置就没了,所以还需要在 gradle 配置里面加几句话。

这些配置需要在子项目的 build.gradle 里面设置:

注意 excludeDirs 后面是 +=, 这样可以把 gradle idea 插件默认文件夹加上(其实也就是 build 和 .gradle 文件夹)。

idea {
    module {
        // idea Module 的忽略列表加入下面这些目录
        excludeDirs += [file('bin'), file('libs'), file('node_modules'), file('tools'), file('.settings')]
    }
}

结语

这一通折腾花了我大半天时间——好吧,感觉更累了,为了保留点劳动成果,我在 github 上创建了个示例项目(其实早就创建了,这次是大更新),有需要的可以参考一下,起码可以少走点弯路。

gradle-multi-project-example

over!!!

© 著作权归作者所有

郁也风
粉丝 16
博文 30
码字总数 15645
作品 0
长宁
项目经理
私信 提问
加载中

评论(2)

郁也风
郁也风 博主

引用来自“HeartKing”的评论

感谢 作者分享 现在有个疑问, 为什要设置多resources目录呢? 为何不像 maven 中的 profile 属性 指定到 不同的 properties 文件呢
原因如下:
1、不太了解 gradle 怎么搞 profile
2、用目录是比较方便管理文件啊
HeartKing
HeartKing
感谢 作者分享 现在有个疑问, 为什要设置多resources目录呢? 为何不像 maven 中的 profile 属性 指定到 不同的 properties 文件呢
gradle idea 整合WEB开发

之前一直在用maven来做为项目管理, 但是好多时候不够灵活, 最近看到gradle觉得不错, 所以将现在的一个项目转成gradle. gradle的介绍我就不说了, 直接说说与idea的整合, 因为在这个过程中遇到...

juqkai
2013/11/05
0
0
IDEA 及 Gradle 使用总结

IDEA 及 Gradle 使用总结 自动编译组件 目前Android开发的主流开发工具是 Eclipse 和 IDEA 目前主流的自动化打包工具时 ant,maven,gradle。 maven工具中有自己的依赖仓库维护,很多开源支持...

舒文joven
2018/07/17
0
0
二、idea导入spring源码

在 fork 官方源码 到自己的仓库后(fork 的好处是方便自己试验和注释), 将其 git clone 下来, 因平时工作用的是 idea 就想用 idea 作为工具。 clone 下来后可以看到根目录下有2个指引文件...

holysu
2018/07/11
0
0
Demo Show | 蚂蚁金服 mPaaS IDEA 插件实践

前言 本文将结合上周在 JetBrains 开发者大会分享的《mPaaS IDEA 插件实践》,深入展开 mPaaS 在 IDEA 插件开发之路上踩过的坑和沉淀的思考,希望能够带来一些参考性: mPaaS 冷启动过程如何...

josephjin
2018/12/18
0
0
IntelliJ IDEA 2018.3 EAP 发布,支持多行 TODO 注释

IntelliJ IDEA 2018.3 EAP 早期访问版发布,该版本包含 IDE 导航,改进的插件页面,Run Anything,多行 TODO 注释等。 Search Everywhere IntelliJ IDEA 2018.3 将引入 Search Everywhere 对...

达尔文
2018/09/07
4.5K
22

没有更多内容

加载失败,请刷新页面

加载更多

nproc systemd on CentOS 7

Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and nproc value for the local users, but I couldn't find a p......

MtrS
今天
3
0
了解微信小程序下拉刷新功能

小程序提供了这个事件。 onPullDownRefresh() 监听用户下拉刷新事件。 如果要开启下拉刷新功能,要先到json配置: "enablePullDownRefresh":true 配置后下拉有反应了但是没有加载效果,在onP...

oixxan__
今天
2
0
springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
29
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部