Maven
1. Maven概念
Maven是一个项目管理的工具, 对项目中使用的jar进行统一规范的管理, 并能够通过插件的方式进行扩展功能.
1.1 约定优于配置
约定优于配置就是说: maven中的一些默认配置, 一般情况下不会去改变这些默认配置. 比如, maven有着自己的默认文件目录.如下
1.2 版本问题
(1) groupId: 团体, 组织名称, 以创建项目的组织名称逆向域名开头, 一般对应着Java的包结构
(2) artifactId: 项目名称
(3) version: 项目版本号
SNAPSHOT:一般用于开发过程,表示不稳定的版本
LATEST:指某个特定构建的最新发布
RELEASE:最后一个发布版
1.3 打包方式packaging
常用的主要两种: jar,打包后输出JAR文件, war,打包后输出web应用
1.4 maven变量
类别 | 例子 |
---|---|
内置属性 | $ {basedir}表示项目根目录,即包含pom.xml文件的目录 $ {version}表示项目版本 $ {project.basedir}同$ {basedir} $ {project.baseUri}表示项目文件地址 $ {maven.build.timestamp}表示项目构件开始时间 |
setting属性 | $ {settings.localRepository }表示本地仓库路径 |
POM属性 | $ {project.build.directory}表示主源码路径 $ {project.build.sourceEncoding}表示主源码的编码格式 $ {project.build.sourceDirectory}表示主源码路径 $ {project.build.finalName}表示输出文件名称 $ {project.version}表示项目版本,与${version}相同 |
Java系统属性 | $ {user.home}表示用户目录 $ {java.version}表示Java版本 |
环境变量属性 | $ {env.JAVA_HOME}表示JAVA_HOME环境变量的值 $ {env.HOME }表示用户目录 |
上级工程变量 | 上级工程的pom中的变量用前缀 ${project.parent } 引用。上级工程的版本也可以这样引用: ${parent.version } |
2. Maven安装和配置
3. Maven依赖的高级特性
3.1 依赖之间的传递性
Maven依赖之间会存在一些联系, 工程引用的依赖之间是会相互传递的. 换句话说, 如果有这样的一种场景, 有A , B , C三个maven工程, A, B工程打包到本地仓库中, B工程依赖于A(B中添加了A的jar包), C依赖于B, maven会在C中引入B包的同时, 将A包也会引入C中, maven进行管理. 不需要用户自己去引入. 即A–>B–>C, C中会有A,B两个jar包.
3.2 依赖版本原则
3.2.1 路径最短者优先原则(层次最浅)
A , B , C三个项目, C依赖于B好A的1.0版本, B依赖A的2.0版本, maven需要解决, C到底依赖A1还是A2,根据路径最短优先的原则, C-A1短语C-B-A2,故C依赖于A的1.0版本.
查看依赖的层次结构的关系: mvn dependency:tree –Dverbose