前言
Maven 翻译为”专家”、”内行”,是 Apache 下的一个纯 Java 开发的开源项目。Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
功能
Maven主要做了两件事:
- 统一开发规范与工具
- 统一管理jar包
约定配置
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
- ${basedir}
存放pom.xml和所有的子目录 - ${basedir}/src/main/java
项目的java源代码 - ${basedir}/src/main/resources
项目的资源,比如说property文件,springmvc.xml - ${basedir}/src/test/java
项目的测试类,比如说Junit代码 - ${basedir}/src/test/resources
测试用的资源 - ${basedir}/src/main/webapp/WEB-INF
web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 - ${basedir}/target
打包输出目录 - ${basedir}/target/classes
编译输出目录 - ${basedir}/target/test-classes
测试编译输出目录 - Test.java
Maven只会自动运行符合该命名规则的测试类 - ~/.m2/repository
Maven默认的本地仓库目录位置
安装/配置
Maven是个Java工具,所以你必须安装了Java才能继续。
Snapshot 版本与 Release 版本
- Snapshot 版本代表不稳定、尚处于开发中的版本。
- Release 版本则代表稳定的版本。
协同开发时,如果 A 依赖构件 B,由于 B 会更新,B 应该使用 SNAPSHOT 来标识自己。这种做法的必要性可以反证如下:
- 如果 B 不用 SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用。
- 如果 B 不用 SNAPSHOT, 但一直使用一个单一的 Release 版本号,那当 B 更新后,A 可能并不会接受到更新。因为 A 所使用的 repository 一般不会频繁更新 release 版本的缓存(即本地 repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的 B