为什么要用Maven?
在写Java项目的过程中,我时常会想:为什么我要用Maven?这里让我选择构建一个Maven项目是为什么?如果没有Maven会怎样?
在学习的过程中,我们不能为了学而学,如果能知道为什么要学一个技术,这个技术的产生背景是什么的话,往往更能激发我们的学习兴趣,提高学习效率。
如果没有Maven
想知道为什么会有Maven,那就看看如果没有Maven的话,我们写Java项目会面临什么样的问题。
项目结构混乱
在基础的代码之外,其实项目的目录结构基本上不会影响项目的正常运行。这就导致了每个人、每个团队、每个公司基本上都有各自的项目结构,公司里会根据项目架构师的规定来统一定义项目结构,但是不同公司的规范又是不同的,这就导致了新人加入项目的难度很大。对于外人来说,代码的可读性很差。
JAR包难以寻找
当你开发一个Java项目时,为了节省常用功能的开发时间,就需要引入别人写好的代码JAR包,每个JAR包你都需要在网上进行搜索,好不容易找到一个能用的JAR包,可能还有病毒,或者版本不对。当你的项目版本需要升级时,你又需要重复寻找版本合适的JAR包。这无疑大大提高了项目的开发难度。
JAR包依赖性问题
试想这样一种情况:你的Java项目中需要用到a.jar,你好不容易找到了a.jar,运行时却报错说a.jar引用了b.jar,这时你千辛万苦在网上找到了b.jar,运行时又报错说b.jar引用了c.jar。等你终于把所有的JAR包都找到之后,却发现JAR包之间的版本又有冲突!你只能按捺住疯狂的心情,去慢慢解决版本冲突!这无疑是件让人抓狂的事情。
多模块项目难以管理
很多项目太大了,为了方便开发与维护,就会分成几个小模块,也就是大项目分成几个小项目。但是如果一个JAR包在多个模块中都需要使用的话,就需要将JAR包复制几份到所有需要的模块里,当JAR包需要更换时,也需要分别将所有涉及到的模块中的相应JAR包都更换。大大增加了大型项目的维护难度。
项目生命周期难以管理
对于一个项目,搭建完项目结构,编码完,就需要编译、打包、发布到测试环境,测试完后再发布到运行环境,如果在测试环境出了问题,就需要重新编码、编译、打包、发布到运行环境,再测试完后发布到运行环境。这中间的每个环节都需要开发人员手动编写相应的指令,非常复杂且浪费时间。
Maven的解决方法
程序设计的发展史就是由繁琐复杂到简洁迅速,为了解决上面提到的问题,Maven便应运而生了。
统一的项目结构
Maven为更方便的项目管理,提供了一个标准化目录结构:
src/main/java |
程序源代码 |
---|---|
src/main/resources |
程序资源 |
src/main/filters |
过滤器 |
src/main/webapp |
Web应用 |
src/test/java |
测试代码 |
src/test/resources |
测试资源 |
src/test/filters |
测试过滤器 |
src/it |
集成测试(主要针对插件) |
src/assembly |
汇编描述符 |
src/site |
网站 |
LICENSE.txt |
项目许可证 |
NOTICE.txt |
项目所依赖的库所需的通知和属性 |
README.txt |
项目自述文件 |
统一的依赖管理
Maven官方维护了一个依赖仓库:https://mvnrepository.com/ ,在这里你可以方便的找到所有你需要的依赖。
你只需要在项目中引入一个依赖,Maven会自动帮你引入该依赖的所有子依赖,并且会自动帮你适配最合适的依赖版本。
模块化管理
对于一个大项目的多个子模块,只需要在各个模块的Maven配置文件中配置Maven子父级关系,子模块就可以直接使用父模块的依赖,无需单独引入。子模块也可以引入单独使用的其它依赖。
生命周期管理
Maven提供的专门的项目生命周期指令,提供自动化生命周期管理。
- clean:将以前编译好的class字节码文件清除
- default(built):
- validate:验证项目是否正确,信息是否可用
- compile:将java源代码编译为class字节码文件
- test:自动单元测试
- package:将项目打包,Java项目打成jar包,Web工程打成war包
- verify:对项目打包后的项目进行检查
- install:将打包好的包,发布到本地Maven仓库
- deploy:将打好的包发布到远程仓库
- site:生成站点信息和项目文档
Maven是什么?
最后,Maven是什么呢?引用Apache Maven Project的官方解释:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
Maven是一个便于软件项目管理与维护的工具。基于项目对象模型POM概念,通过中心化的信息来管理项目的构建、报告及文档。