一、多项目构建

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、配置根项目

我们可以通过以下步骤,对包含在多项目构建中的项目进行配置:

  1. 在根项目的根目录下创建settings.gradle文件,一个多项目Gradle构建必须含有这个文件,因为它指明了那些包含在多项目构建中的项目。
  2. 确保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' 

repositories {
    mavenCentral()
} 
dependencies {
    testCompile 'junit:junit:4.11'

3.4、配置app子项目 

在配置app项目之前,我们先来快速浏览一下对一些特殊依赖的依赖管理,这些依赖都是同一个多项目构建的一部分,我们将其称之为”项目依赖“。

如果多项目构建拥有项目A和B,同时,项目B的编译需要项目A,我们可以通过在项目B的build.gradle文件中添加以下依赖声明来进行依赖配置。

dependencies{

    compile project('A')

}

现在,我们可以按照以下步骤配置app项目:

  1. 在app项目的根目录下创建build.gradle文件。
  2. 用Java插件创建一个Java项目。
  3. 确保app项目从Maven2中央仓库(central Maven2 repository)中获取依赖。
  4. 配置所需的依赖,app项目在编译时需要两个依赖:Log4j (version 1.2.17)和core 模块
  5. 创建二进制发布版本

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 {

    apply plugin: 'java' 
    repositories {
        mavenCentral()
    }
} 
// 所有项目所共享的配置
allprojects {

    //Add configuration here
}

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)多项目构建实战的更多相关文章

  1. Gradle入门(3):构建第一个Java项目

    Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...

  2. Gradle入门(2):构建简介

    基本概念 在Gradle中,有两个基本概念:项目和任务.请看以下详解: 项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境).一个项目包含一个或多个任务. 任务是指不可分的最小 ...

  3. vuejs2从入门到精通与项目开发实战

    vuejs2从入门到精通:一.基础部分0.课件1.介绍2.vue实例3.模板语法4.计算属性和观察者5.Class与Style绑定6.条件渲染7.列表渲染8.事件处理9.表单输入绑定10.1.组件(1 ...

  4. vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除

    一.SPA 不是指水疗.是 single page web application 的缩写.中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索. 所有的前端人员都应该明白我们的页面的 u ...

  5. 项目构建工具Gradle的使用入门(参考,只表明地址)

    Gradle入门介绍:简介 http://blog.jobbole.com/71999/ Gradle入门介绍:第一个Java项目 http://blog.jobbole.com/72558/ Gra ...

  6. 项目自动化建构工具gradle 入门4——javaWeb在浏览器中显示helloWorld

    在java应用中,其实做的最多的还是java web应用.所以现在我们做的就是用gradle构建一个简单的web项目,简单点,直接上代码吧. 1.进入目录D:\work\gradle\web,新建文件 ...

  7. C实战:项目构建Make,Automake,CMake

    C实战:项目构建Make,Automake,CMake 在本系列文章<C实战:强大的程序调试工具GDB>中我们简要学习了流行的调试工具GDB的使用方法.本文继续"C实战" ...

  8. C实战:项目构建Make,Automake,CMake【转】

    转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...

  9. 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程

    之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...

随机推荐

  1. WP Super Cache+七牛云配置CDN加速,让你的网站秒开

    CDN加速网站是几乎所有的站长都在考虑的问题,CDN,全称是Content Delivery Network,即内容分发网络.所谓CDN加速,通俗的来说就是把原服务器上数据复制到其他服务器上,用户访问 ...

  2. 防F12审查元素扒代码:按下F12关闭当前页面

    有的时候我看别人的网站的某个部分做的比较好我都会通过按F12审查元素来查看别人的代码,那么如果不然别人查看自己网站的代码呢.一段JavaScript代码即可实现上述功能,插入到footer.php或者 ...

  3. 5分钟学习spark streaming之 轻松在浏览器运行和修改Word Counts

    方案一:根据官方实例,下载预编译好的版本,执行以下步骤: nc -lk 9999 作为实时数据源 ./bin/run-example org.apache.spark.examples.sql.str ...

  4. 云主机和vps的区别

    云主机和vps的区别   近年来,IT行业开始热衷于各种云概念,而云主机就是其中之一,并且有越来越热之势.对普通用户而言,可能不太清楚云主机和VPS的区别,下面我们就来说说云主机和VPS到底有什么不同 ...

  5. 部署wcf出现的问题与解决方法

    我将本机作为服务器开发时,没出什么问题,将wcf服务端寄缩到另一台电脑上时,出现了一些问题,这里总结下: 1.wcf服务器和另一个网站应用出问题 服务器的iis上有一个网站应用,当我将wcf服务寄缩到 ...

  6. 戴尔R720xd服务器系统安装

    型号:R720xd 开启服务器,Ctrl+R进入raid配置 配置完raid后F2对硬盘进行格式化 保存并重启 F11进入BIOS选项设置U盘启动 选择U盘启动 开始进行系统安装!

  7. 20165230 《Java程序设计》第1周学习总结

    20165230 2017-2018-2 <Java程序设计>第1周学习总结 教材学习内容总结 本周通过学习了解了java的历史,地位,特点以及java的应用和基本的开发步骤,对Java有 ...

  8. 针对微信的一篇推送附有的数据链接进行MapReduce统计

    原推送引用:https://mp.weixin.qq.com/s/3qQqN6qzQ3a8_Au2qfZnVg 版权归原作者所有,如有侵权请及时联系本人,见谅! 原文采用Excel进行统计数据,这里采 ...

  9. Angular开发实践(四):组件之间的交互

    在Angular应用开发中,组件可以说是随处可见的.本篇文章将介绍几种常见的组件通讯场景,也就是让两个或多个组件之间交互的方法. 根据数据的传递方向,分为父组件向子组件传递.子组件向父组件传递及通过服 ...

  10. PHP中的ArrayAccess用法详解

    在Laravel的源码当中,作者多次使用到了PHP SPL中的ArrayAccess接口,那么这个ArrayAccess接口到底有什么作用呢?我会用一个简单的例子跟大家说明. 请看下面的这段代码,Fo ...