参考文章:

概述
  作为一个项目管理工具,maven已经流行了好多年,近几年gradle的项目慢慢多了起来,对其做一个基本的了解还是非常必要的。
  两者定位相同,既然产生了gradle这个后来者,那maven有哪些不足呢?一般说来,maven的不足主要在2个方面:
  1、不够简便。尤其当项目较大,依赖的jar包多的时候,pom文件会变的非常庞大,即使做了分段整理加了注释,查找起来还是感觉内容太多,有些不方便;
  2、不够灵活。其实这个多数时候还好说,至少我的感受并不明显。就是maven的构建过程是严格线性的(参见文章),如果要做额外的操作,需要借助插件或者干脆自定义插件,这都是相对繁琐的;
  而gradle由于grovvy语言的支持,可以做到比xml简化很多的配置文件,也可以自己灵活的控制编译打包的过程。
目标
  搭建一个springboot的项目,实现controller跟service的分离依赖
构建及打包测试
  spring的gradle项目,可以利用https://start.spring.io进行构建,比如:

  点击Generate Project,即可下载到一个压缩包,解压导入idea,结构如下:

  目录结构跟maven项目非常类似,只是原来的pom.xml替换成了settings.gradle跟build.gradle两个文件。settings主要用于设置父子模块依赖一类的配置,用于跟其它模块的交互,build则用于项目构建。
  默认settings.gradle的内容只有项目名一行:rootProject.name = 'zzzgradletest'
  默认build.gradle内容如下:

plugins{
id 'java' //这是个java项目,因为gradle可以构建多种语言项目
id 'org.springframework.boot' version '2.1.3.RELEASE'
}
apply plugin: 'io.spring.dependency-management'
group 'com.study.wzy'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8 jar { // 打jar包的配置
baseName = 'mytest'
version = '0.0.1'
manifest {
attributes "Manifest-Version": 1.0,
'Main-Class': 'com.study.wzy.GradletestApplication'
}
}
repositories { //maven资源库配置
mavenLocal() //优先使用本地库,win下可以跟maven共用,mac os下未找到如何配置共用
mavenCentral()
}
configurations {
compileOnly { //仅在编译时依赖,此处为lombok使用,相关注解在编译时生成getter、setter等
extendsFrom annotationProcessor
}
} dependencies { //依赖jar包,每个jar包坐标包含三个基本元素:group,name,version
annotationProcessor 'org.projectlombok:lombok:1.18.6'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.3.RELEASE'
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.1.3.RELEASE'
testCompile group: 'junit', name: 'junit', version: '4.12' //testCompile 表示作用域
}

  运行idea右边gradle下的build,可以生成jar包,java -jar xxx.jar 进行运行,可以访问:

  示例代码:

  运行jar:
  访问结果

 拆解项目
  将项目拆为2个module,分别存放controller跟service,利用gradle设置依赖关系,并进行测试。
  idea中,file -> new Module ,选择gradle跟java,next到底。创建service如下:

@Service
public class TestService {
public String getName(){
return "jack";
}
}
web项目的启动类代码为:  
@RequestMapping("/test")
@RestController
@SpringBootApplication
public class GradletestApplication {
public static void main(String[] args) {
SpringApplication.run(GradletestApplication.class, args);
}
@Autowired
private TestService testService;
@RequestMapping("/mytest")
public String mytest(){
return "hello " + testService.getName();
}
}
  在web项目,settings.gradle中引入service模块:

rootProject.name = 'zzzgradletest'
includeFlat 'zzzservicetest'
  在web项目的build.gradle中设置

compile project(':zzzservicetest')
  引入service并进行依赖,gradle分别进行编译后就可以进行访问测试了

  另:以上建立的两个模块是独立的,没有在同一个project下,因此本例中将共同的依赖放到了service中,这样web在依赖了service后会根据依赖传递,依赖到spring的相关jar。若service跟web两个module都在同一个gradle的project下,则可以将共同的配置放到project的build.gradle中,而且在new module后会自动在project的setting.gradle中生成 include 'zzzservice' 类似的代码,此时,则不用在web中配置includeFlat ‘xxxxxxx’了,includeFlat的含义是引用一个同级模块。
  鉴于gradle的版本不同,有些配置也会略有区别,比如2.1及以上版本用plugins,而低版本则用apply plugin 。
 
  暂时这样,一个简单的demo,用于熟悉gradle。

 
 

gradle简单配置跟模块依赖的更多相关文章

  1. 解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。

    最近需要初始化一个SpringBoot新项目遇到一个问题就是:项目中有多个子模块,使用gradle依赖管理成功. 项目结构如下: project --module1     --module2我的mo ...

  2. gradle新建工程,多项目依赖,聚合工程

    感谢gradle完全的文档.开始完全没想过新建项目会弄我一天时间,都说gradle构建项目简单,我现在回复他们呵呵. gradle是个非常复杂的工具,从他的完整包80M和72章官方文档就可以看出一二. ...

  3. 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定

    前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...

  4. Angular JS的模块依赖

    AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易. AngularJS简化应用 ...

  5. 谈谈.net模块依赖关系及程序结构

    技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...

  6. Android Studio之gradle的配置与介绍

    1.gradle的简单介绍 Gradle是可以用于Android开发的新一代的Build System,也是Android Studio默认的build工具.其实Gradle脚本是基于一种JVM语言- ...

  7. Maven--多模块依赖实例解析(五)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...

  8. Java 9 揭秘(4. 模块依赖)

    文 by / 林本托 Tips 做一个终身学习的人. 在此章节中,主要学习以下内容: 如何声明模块依赖 模块的隐式可读性意味着什么以及如何声明它 限定导出(exports)与非限定导出之间的差异 声明 ...

  9. gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战

    一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走 ...

随机推荐

  1. webstorm的debug模式

    F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内, 如果该方法体还有方法,则不会进入该内嵌的方法中 * F8 在 Debug 模式下,进入下一步,如果当前行断点是 ...

  2. python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】

    前言:数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matla ...

  3. 数据库架构设计的三种模式:share nothing , share everythong , share disk

    数据库构架设计中主要有Shared Everthting.Shared Nothing.和Shared Disk: Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMO ...

  4. Mathcad操作tips:函数、符号计算

    函数 1. 利用“:”进行函数定义,如 2. 函数支持range variable输入,如 3. 常用数学函数可以在Insert - Function菜单中寻得. 4. 当不确定某个名字是否是函数名时 ...

  5. 折腾了两天的跨站脚本提交问题,与IIS7有关

    根据这里提供的方法,本地测试通过没有问题,但是部署到服务器上之后,只有GET请求可以跨站提交,POST请求继续报错,折腾了两天之后觉得,是不是IIS7的问题?果然,找到了这篇文章,照做之后解决.

  6. IIS 发布webservice 需要用户名和密码访问 解决

    今天,我在IIS上发布了一个自己写的webservice,然后我在远程通过浏览器来访问这个webservice的时候出现一个登录界面如下  之前我朋友发布webservice的时候也出现过一次,那次好 ...

  7. 使用SQL Delta.v5.1.1.98.破解版同步数据结构

    概述 本篇文章主要介绍SQL DELTA的简单使用.为了能够更加明了的说明其功能,本文将通过实际项目中的案例加以介绍. 1. SQLDELTA简介 SQLDELTA是一款便捷实用的数据库管理工具.使用 ...

  8. WebSerervice webapi使用

    WebSerervice  webapi使用 1.传json参数: 2.返回json数据: 3.权限控制: Authorize特性:必须经过认证,请求头必须具有token信息 4.路由: 5.过滤器: ...

  9. NSUserdefault读书笔记

    作用 用来存储首选项的.本来首选项是存在磁盘上的,NSUserdefault相当于提供了一个缓存,不用每次都写文件.也就是说设置首选项以后,可以马上读出来,不必先写到磁盘中去. 定期调用synchro ...

  10. CH2401 送礼物(双向dfs)

    CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...