Gradle与Maven

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

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

 org.springframework

 spring-test

 

 

junit

 junit

 4.12 

test 

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实现。

Gradle与Maven_第1张图片 

 

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

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

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

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

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

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

典型的maven项目

Gradle与Maven_第2张图片

 

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

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

dependencies {

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

 testCompile junit:junit:4.+' 

}

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

 

  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等相应资源。

你可能感兴趣的:(学习笔记,spring,boot)