第一次知道maven这个东西是在学习hadoop源码的时候,发现源码不同的文件夹下有许多pom.xml文件&#xff0c;编译的时候也要用到mvn相关命令。为了明白其中的工作原理&#xff0c;开始学习maven.把学习<>这本书的体会分享一下&#xff0c;希望共同学习&#xff0c;共同进步。
首先&#xff0c;需要知道maven是干什么的。简单来说&#xff0c;maven是一个构建工具&#xff0c;能够帮助我们完成项目的编译&#xff0c;清理&#xff0c;测试&#xff0c;生成报告&#xff0c;打包和部署。
单纯从构建功能来看&#xff0c;和make十分相似&#xff0c;熟练的使用make工具似乎也能完成这些任务。但是make很难跨平台构建&#xff08;虽然也可以&#xff09;&#xff0c;另外&#xff0c;Makefile的语法格式比较复杂&#xff0c;不够直观&#xff0c;而maven是使用xml文件来描述相似的信息的。
除了构建功能外&#xff0c;maven还是一个强大的依赖管理工具和项目信息管理工具。
对于java这个大生态圈来说&#xff0c;使用各种类库是很平常的。解决它们之间的版本不一致&#xff0c;版本冲突&#xff0c;依赖等问题变得十分繁琐。maven通过对每一个构件(artifact,可以理解为一个模块&#xff0c;一个jar包&#xff09;引入经纬&#xff0c;来对各种开源类库标识。基于这个基础&#xff0c;我们可以有效地解决依赖问题。
maven对项目的目录结构&#xff0c;测试用例命名等有既定的规则&#xff0c;遵循这些约定&#xff0c;用户在项目间切换的时候就免去了额外学习的成本&#xff0c;可以说是约定优于配置。
最后&#xff0c;maven的各种功能都是通过插件完成的.比如执行mvn clean来清除工程&#xff0c;使用的是clean插件。
同理还有用于编译的&#xff0c;用于测试的插件。这些插件都存放在maven的一个中央仓库里&#xff0c;首次执行mvn命令的时候&#xff0c;会去这个中央仓库下载所需的插件到~/.m2目录下。maven中央仓库除了有maven本身用到的插件外&#xff0c;还有许多现成的开源类库&#xff0c;可以根据项目的依赖下载所需的类库。
综上所述&#xff0c;maven是一个构建&#xff0c;依赖管理&#xff0c;项目管理工具。本身是通过不同的插件完成不同的功能的。这样我们对maven就有了一个整体的认识。