前段时间说一直以来对Maven只知道用但不求甚解,想要系统学习一下,然后就拖延症发作直到最近才实施。参考了'乐字节xyx小可爱qwq'小仙女的2021最新Maven教程,以及GJYoung的maven快速入门。前者的内容更加详细,对Maven中比较有意思的使用有更多讲解;而后者则集中在Maven的基础使用。经过这段事件的学习自认为对Maven的理解有了些进步,这里记录一下一些学习要点。
Maven的作用
简单总结Maven是用来为Java项目提供「项目构建,依赖管理」的工具。它主要提供两方面的帮助。
- 提出一套项目源代码即资源的目录结构,在此基础上构建项目实体。
- 通过
pom.xml
实施依赖管理,下载以及管理项目依赖的库。
Maven还有其他的一些功能,但以上两点最为关键和常用。
在过去我们构建管理Java项目的时候需要依托IDE,不同的IDE之间又有着一定的差别,项目导入导出项目可能会出现兼容问题。Maven的存在则为Java项目的构建提供了一套完整的方案,IDE只要对Maven做好兼容,问题一般来说就不大。除开项目在不同IDE之间的导入导出,Maven作为统一方案,也降低了开发者学习成本。
Maven的特殊应用
Maven的使用比较直观,基本上通过正是项目的pom.xml
的语法语义能够猜出其基本应用。这个部分主要罗列几个Maven的特殊应用。
Maven的多模块项目
参考教程Maven环境下多模块项目的构建。在过往的项目中,对于子模块的划分只是简单的用文件夹进行区分,譬如把dao的代码存储在dao文件夹下。这为一些开发者违背单向调用原则在模块之间互相调用提供空间。这种不规范的开发会造成强耦合,增加开发、调试难度。在Maven项目下构建多模块开发可以强制开发者严格遵循模块间的单向调用,使得项目开发更加规范。
通过Maven为不同环境进行打包
参考教程Maven的打包操作。这部分内容讲解了如何根据不同的环境进行打包。譬如说,在开发过程和产品部署中使用不同的数据库服务器,Maven可以通过配置为相应环境进行打包。
解决依赖冲突
教程Maven依赖的基本概念末尾讲解了如何解决依赖冲突的问题。这里的依赖冲突指的是,项目的两个依赖链条中包含了同一个库的不同版本。尽管这种情况并不常见,但也在我的开发中曾经遇到过。
Maven私服
Maven有3种仓库,中央,私服和其他公共仓库。在学习的过程中也了解了私服方面的内容,可以通过部署Nexus搭建(有现成的Docker镜像)。具体搭建和使用则没有深入研究。
其他内容
- 「小仙女」的教程中提到过一个Jetty的服务器框架,相对Tomcat轻量些,之前没有研究过,这里Mark一个做备忘。
- RUNOOB.COM而Maven教程,这里可以找到文档生成,快照,自动扣部署等内容的说明。