gradle入门(1-4)多项目构建实战
一、多项目构建
1、多项目构建概念
尽管我们可以仅使用单个组件来创建可工作的应用程序,但有时候更广泛的做法是将应用程序划分为多个更小的模块。
因为这是一个非常普遍的需求,因此每个成熟的构建工具都必须支持这项功能,Gradle也不例外。
如果Gradle项目拥有多于一个组件,我们就称之为多项目构建(multi-project build)。
2、多项目构建的需求描述
我们的例子拥有两个模块:
2.1、core模块:
包含一些通用的组件,它们能够被程序的其他模块使用。
在我们的例子上,只包含一个类:MessageService类返回‘Hello World!’字符串。
该模块只有一个依赖:它包含一个单元测试,使用Junit 4.11。
2.2、app模块:
包含HelloWorld类,是程序的开端,
它从MessageService对象中获取信息,并将接收到的信息写入一个日志文件中。
该模块拥有两个依赖:它需要core模块,还使用Log4j 1.2.17作为日志库。
3、建立多项目的gradle工程
下面我们将创建一个多项目的Gradle构建,包括两个子项目:app 和 core。
3.1、建立目录结构
初始阶段,先要建立Gradle构建的目录结构。
建立core模块的根目录(core),并建立以下子目录:
src/main/java目录包含core模块的源代码。
src/test/java目录包含core模块的单元测试。
建立app模块的根目录(app),并建立以下子目录:
src/main/java目录包含app模块的源代码。
src/main/resources目录包含app模块的资源文件。
3.2、配置根项目
我们可以通过以下步骤,对包含在多项目构建中的项目进行配置:
- 在根项目的根目录下创建
settings.gradle文件,一个多项目Gradle构建必须含有这个文件,因为它指明了那些包含在多项目构建中的项目。 - 确保app和core项目包含在我们的多项目构建中。
我们的settings.gradle文件如下:
include 'app'
include 'core'
3.3、配置core子项目
我们可以通过以下步骤对core项目进行配置:
- 1. 在core项目的根目录下创建build.gradle文件。
- 2. 使用Java插件创建一个Java项目。
- 3. 确保core项目从Maven2中央仓库(central Maven2 repository)中获取依赖。
- 4. 声明JUnit依赖(版本4.11),并使用testCompile配置项,该配置项表明:core项目在它的单元测试被编译前,需要JUnit库。
core项目的build.gradle文件如下:
apply plugin: 'java'
3.4、配置app子项目
在配置app项目之前,我们先来快速浏览一下对一些特殊依赖的依赖管理,这些依赖都是同一个多项目构建的一部分,我们将其称之为”项目依赖“。
如果多项目构建拥有项目A和B,同时,项目B的编译需要项目A,我们可以通过在项目B的build.gradle文件中添加以下依赖声明来进行依赖配置。
dependencies{
compile project('A')
}
现在,我们可以按照以下步骤配置app项目:
- 在app项目的根目录下创建build.gradle文件。
- 用Java插件创建一个Java项目。
- 确保app项目从Maven2中央仓库(central Maven2 repository)中获取依赖。
- 配置所需的依赖,app项目在编译时需要两个依赖:Log4j (version 1.2.17)和
core模块 - 创建二进制发布版本
apply plugin: 'application'
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'log4j:log4j:1.2.17'
compile project(':core')
}
mainClassName = 'net.petrikainulainen.gradle.client.HelloWorld'
task copyLicense {
outputs.file new File('$buildDir/LICENSE')
doLast {
copy {
from 'LICENSE'
into '$buildDir'
}
}
}
applicationDistribution.from(copyLicense) {
into '';
}
二、多项目构建优化 - 移除重复配置
1、提升冗余配置到根项目
subprojects {
2、在根项目中指名配置子项目
2.1、core/build.gradle文件
dependencies{
testCompile 'junit:junit:4.11'
}
2.2、app/build.gradle文件
apply plugin: 'application'
dependencies{
compile 'log4j:log4j:1.2.17'
complile project(':core')
}
mainClassName='com.inspur.example.gradle.HelloGradle'
task copyLicense {
outputs.file new File('$buildDir/LICENSE')
doLast {
copy {
from 'LICENSE'
into '$buildDir'
}
}
}
applicationDistribution.from(copyLicense) {
into '';
}
3、构建多项目 gradle projects
这条命令执行结果会列出根项目下的子项目(app和core),意味着多项目Gradle构建成功了。
三、附录
1、如何查看gradle插件提供的各种任务----->gradle tasks
举个例子,Java插件在我们的构建中加入了很多任务,如:
- assemble 任务会编译程序中的源代码,并打包生成Jar文件,这个任务不执行单元测试。
- build 任务会执行一个完整的项目构建。
- clean 任务会删除构建目录。
- compileJava 任务会编译程序中的源代码。
如何查看这些任务呢?我们通过 gradle tasks:

gradle入门(1-4)多项目构建实战的更多相关文章
- Gradle入门(3):构建第一个Java项目
Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...
- Gradle入门(2):构建简介
基本概念 在Gradle中,有两个基本概念:项目和任务.请看以下详解: 项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境).一个项目包含一个或多个任务. 任务是指不可分的最小 ...
- vuejs2从入门到精通与项目开发实战
vuejs2从入门到精通:一.基础部分0.课件1.介绍2.vue实例3.模板语法4.计算属性和观察者5.Class与Style绑定6.条件渲染7.列表渲染8.事件处理9.表单输入绑定10.1.组件(1 ...
- vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除
一.SPA 不是指水疗.是 single page web application 的缩写.中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索. 所有的前端人员都应该明白我们的页面的 u ...
- 项目构建工具Gradle的使用入门(参考,只表明地址)
Gradle入门介绍:简介 http://blog.jobbole.com/71999/ Gradle入门介绍:第一个Java项目 http://blog.jobbole.com/72558/ Gra ...
- 项目自动化建构工具gradle 入门4——javaWeb在浏览器中显示helloWorld
在java应用中,其实做的最多的还是java web应用.所以现在我们做的就是用gradle构建一个简单的web项目,简单点,直接上代码吧. 1.进入目录D:\work\gradle\web,新建文件 ...
- C实战:项目构建Make,Automake,CMake
C实战:项目构建Make,Automake,CMake 在本系列文章<C实战:强大的程序调试工具GDB>中我们简要学习了流行的调试工具GDB的使用方法.本文继续"C实战" ...
- C实战:项目构建Make,Automake,CMake【转】
转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...
- 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程
之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...
随机推荐
- 如何提高windows的性能
默认windows启用了很多的效果,我们可能平时没有注意到,比如什么淡入淡出效果之类的,其实在我看来,这些效果不仅难看,而且影响了windows的性能,下面我就来说说怎么通过关闭这些效果来提高wind ...
- vmware虚拟机各个版本的安装破解(附安装包和注册机)
VMware 是平时我们常用的虚拟机软件,特别是我们平时想试试其他的系统,比如说linux系统的时候但是又不想安装双系统,那么这个时候我们就可以试试这款虚拟软 件,如果你的电脑配置(主要是内存)够好的 ...
- video常用功能
本文的目录: 1.获取影片总时长2.播放.暂停3.获取影片已播放时间和设置播放点4.音量的获取和设置 第一.获取影片总时长 对播放器(video)操作,首先要得到的是影片的一些信息,其中一个就是总时长 ...
- 初尝Eclipse
一.选择开发工具 1.Eclipse和JDK 我所选用的是Eclipse开发工具,此工具可以用来编译JAVA语言,但windows系统没有内置的JAVA运行环境,所以需要下载JDK,用来配置JAVA的 ...
- 笔记:Maven 创建 Nexus 私服
首先从 http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,下载 bundle 包,不需要Web容器. windows 系统安装 目录结构说明 目录 说 ...
- 微信小程序中实现微信支付
最近在做微信小程序,今天刚好做到小程序里的微信支付这块,踩过不少坑,特此写个博客记录下,希望能帮到其它人吧. 我总结了一下,小程序中的微信支付和之前其它的公众号里的微信支付有两个区别,第一就是小程序必 ...
- 漫谈Java IO之普通IO流与BIO服务器
今天来复习一下基础IO,也就是最普通的IO. 网络IO的基本知识与概念 普通IO以及BIO服务器 NIO的使用与服务器Hello world Netty的使用与服务器Hello world 输入流与输 ...
- WHCTF-babyre
WHCTF-babyre 首先执行file命令得到如下信息 ELF 64-bit LSB executable, x86-64 尝试用IDA64打开,定位到关键函数main发现无法F5,尝试了修复无果 ...
- 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)
前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...
- C语言第0次作业
一.你认为大学的学习生活.同学关系.师生应该是怎样的? (1)学习生活:首先大学的学习生活应该是充实的,尽量做到时时有事做.每天有计划的学习.生活.华尔街有一位名叫罗伊.R.纽伯格的投资大师,他每天早 ...