Gradle与Maven

Spring boot从根本上讲,是一个库的集合,是一个用来简化新spring应用的初始搭建以及开发过程的全新框架,特定方式(继承starter,约定优先于配置),maven或者gradle项目导入相应的依赖就可使用springboot。

Maven:xml语言,是Java中的新的依赖管理系统,在Java中可用groupld、artifactld、version组成的coordination(坐标)唯一标识出一个依赖。基于maven构建的项目自身必须要定义这三种属性,最后生成的包的格式可用是jar,war,ear。

<dependency>

 <groupId>org.springframework</groupId>

 <artifactId>spring-test</artifactId>

 </dependency>

<dependency> 

<groupId>junit</groupId>

 <artifactId>junit</artifactId>

 <version>4.12</version> 

<scope>test</scope> 

</dependency>

Dependency里有g,a,v(),但是还有其他几个元素,包括了作用域scope,有5个可选值,compile(不写就默认为这个)(编译时),test(测试时),provided,runtime(运行时),system。

complie是指的是编译,测试,运行中都会用到,也就是说,默认的是所有的环节都会用到。

test是测试的时候用的,也就是说不参与打包,那么也就是说打包的时候会小一些,比如说junit一般都是test,也就是说在测试环节会用到,但是正式环节不会用到,那么就可以用到test

runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译,oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。

 

 

provided指的是打包时不会打包进去,但是会参与编译,测试,运行。在依赖中也不会继承下去。这里的sevlet在tomcat里面有,所以不用打包进去,但是其它地方又会用到。

system指的是有些包不能通过gav直接找到,或者是自己写的包。我们有一种作法是加入到classpath里面去。但是那样不利于后面的人理解和操作。

maven提供了一种方式,就是scope写system,同时再加一个元素<systemPath><systemPath/>这里写jar的路径(这样也可以直接引用了)

引用依赖时,可用将版本省略,获取依赖自动选择最新版本。

Maven组件:远程仓库、本地仓库(本地计算机,通过maven安装目录下的settings.xml文件可用配置本地仓库路径,或者采用远程仓库的地址)

Maven的多模块(module)构建:定义parent POM(project object model项目对象类型)作为一组module 的聚和POM,在该POM中可以使用<module>标签来定义一组子模块,parent POM没有实际产出,build配置以及依赖配置都会自动继承给子module。

典型的maven项目

 

Gradle:采用代码逻辑的方式进行构建,使得它能更加的灵活。

1、在maven的基础上引用依赖的地方有改进

dependencies {

 compile 'org.hibernate:hibernate-core:3.6.7.Final'

 testCompile junit:junit:4.+' 

}

  1. 版本动态依赖,版本号后使用+可以实现动态版本管理。
  2. Maven和gradle进行依赖管理时都是传递性依赖,如果多个依赖项指向同一个依赖项的不同版本就会引起依赖冲突。
  3. Maven依赖解调遵循两个原则,路径最近原则以及定义顺序原则

 

  1. Gradle的冲突解析则是选用新的版本(新的版本一般都会向下兼容)

Gradle的多模块构建在parent的build.gradle中可以使用allprojects和subprojects代码块来分别定义里面的配置是应用于所有项目还是子项目。对于子模块的定义是放置在setttings.gradle文件中的。在gradle的设计当中,每个模块都是Project的对象实例。而在parent build.gradle中通过allprojects或subprojects可以对这些对象进行各种操作。

Parent的build.gradle中有以下代码:

allprojects{

 task hello << { task -> println "I'm $task.project.name" }

 }

执行命令gradle -q hello会依次打印出父module以及各个submodule的项目名称。这种强大的能力能让gradle对各个模块具有更强的定制化。

Gradle项目:与maven相比,只需在文件中包含apply plugin:'java',系统会自动识别source、resource、test srouce、 test resource等相应资源。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因特朗姆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值