本文共 3520 字,大约阅读时间需要 11 分钟。
当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
由于我们的模块很多,所以我们又抽象了一层,如下图抽出一个femicro来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。 在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
继承自springboot-parent
本项目中,父类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
点击进入fastjson,发现是有刚刚的父类所管控版本
version
统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
这一概念和springboot很契合,为项目提供合理的默认行为,无需不必要的配置,提供了默认的目录
- src ——> 源代码和测试代码的根目录
- main 应用代码的源目录
- java 源代码
- resources 项目的资源文件
- test 测试代码的源目录
- java 测试代码
- resources 测试的资源文件
- target 编译后的类文件、jar文件等
对于Maven约定优于配置的理解,一方面对于小型项目基本满足我们的需要基本不需要自己配置东西,使用Maven已经配置好的,快速上手,学习成本降低;另一方面,对于不满足我们需要的还可以自定义设置,体现了灵活性。配置大量减少了,随着项目变的越复杂,这种优势就越明显。
转载地址:http://qlazi.baihongyu.com/