为什么要用Maven?

为什么要用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概念,通过中心化的信息来管理项目的构建、报告及文档。

相关推荐
乐之者v1 分钟前
leetCode43.字符串相乘
java·数据结构·算法
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹8 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫9 小时前
泛型(2)
java
超爱吃士力架9 小时前
邀请逻辑
java·linux·后端
南宫生9 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石9 小时前
12/21java基础
java