dependencyManagement 和 dependencies 区别
dependencyManagement:
只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本
dependencies:
相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
原来dependencyManagement 只是申明依赖,并不实现引入。问题就在这里了,把依赖放到dependencies里面
1.在同一个pom文件下,如果
2.在不同的pom文件中,存在父子相互依赖关系的,父项目的pom中
引入SpringBoot的两种方法
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
org.springframework.boot
spring-boot-dependencies
2.0.4.RELEASE
pom
import
demo0
简单分析一下,最外层是pf-login,下面有client、server、dao三个模块:
①、client模块用于注册服务,提供服务的调用接口,是调用login服务的入口。
②、server模块用于处理业务逻辑。
③、dao模块用于数据持久,和数据库打交道。
我们还可以加一些其他的模块,比如common,base之类的用来存放公共工具等等。
模块间的依赖关系:client 依赖 server ,server 依赖 dao。
1、pf-login的pom.xml(最外层,也是父目录)
4.0.0
cn.pw
pf-login
1.0-SNAPSHOT
pom
UTF-8
UTF-8
1.8
Dalston.SR4
1.2.15
org.springframework.boot
spring-boot-starter-parent
1.5.8.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.boot
spring-boot-starter-test
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
runtime
com.alibaba
fastjson
${fastjson-version}
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
pf-login-client
pf-login-dao
pf-login-server
所有关于pf-login模块的依赖都统一写在了这里 ,为了方便管理和避免重复依赖。与之前略有不同的是,我们加入了数据库的依赖组件,jpa和mysql。
我们也注意到了pom中引入了阿里巴巴的fastjson,这个与其他依赖写法不同,也就 证明SpringBoot是支持第三方依赖,也支持自定义依赖的。
2、pf-login-client的pom.xml
4.0.0
cn.pw
pf-login
1.0-SNAPSHOT
pf-login-client
pf-login-client
cn.pw
pf-login-server
1.0-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
上面我们设计了client 依赖 server,所以pom中添加了对 server的dependency。
3、pf-login-server的pom.xml
4.0.0
cn.pw
pf-login
1.0-SNAPSHOT
pf-login-server
cn.pw
pf-login-dao
1.0-SNAPSHOT
4、pf-login-dao的pom.xml
4.0.0
cn.pw
pf-login
1.0-SNAPSHOT
pf-login-dao
demo1
parent
4.0.0
com.demo
demo-parent
0.0.1-SNAPSHOT
pom
demo-parent
Demo project for Spring Boot
demo-apply
demo-common
demo-static
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-dependencies
1.5.1.RELEASE
pom
import
org.apache.maven.plugins
maven-compiler-plugin
3.1
${java.version}
children
4.0.0
demo-apply
jar
demo-apply
Demo project for Spring Boot
com.demo
demo-parent
0.0.1-SNAPSHOT
../pom.xml
com.demo
demo-common
0.0.1-SNAPSHOT
com.demo
demo-static
0.0.1-SNAPSHOT
war
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
com.demo.demoapply.DemoApplyApplication
ZIP
repackage
demo2
当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
由于我们的模块很多,所以我们又抽象了一层,如下图抽出一个femicro来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
本项目中,父类 femicro pom中dependencyManagement配置
org.springframework.cloud
spring-cloud-dependencies
Finchley.M8
pom
import
com.alibaba
fastjson
1.2.33
com.alibaba
druid
1.0.11
4.0.0
io.fredia
femicro
1.0.0-SNAPSHOT
femicro-cache
femicro-cache
http://maven.apache.org
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
redis.clients
jedis
com.alibaba
fastjson
org.apache.commons
commons-lang3
joda-time
joda-time
javax.servlet
javax.servlet-api
org.slf4j
log4j-over-slf4j
1.7.7