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

相关推荐
迷藏4946 分钟前
# 发散创新:基于Selenium的自动化测试框架重构与实战优化在当今快速迭代的软件开
java·python·selenium·测试工具·重构
Nyarlathotep011325 分钟前
LockSupport工具类
java·后端
阿巴斯甜30 分钟前
BiFunction的使用
java
XiYang-DING33 分钟前
【Java EE】多线程(1)
java·python·java-ee
刘 大 望43 分钟前
RAG相关技术介绍及Spring AI中使用--第三期
java·人工智能·后端·spring·机器学习·ai·aigc
NOCSAH1 小时前
统好AI:Java技术生态下的智能知识管理新选择
java·开发语言·人工智能
阿巴斯甜1 小时前
Java中 Consumer 的用法:
java
做个文艺程序员1 小时前
Spring Boot 封装 OpenClAW 服务层最佳实践【OpenClAW + Spring Boot 系列 第2篇】
java·人工智能·spring boot·开源
说实话起个名字真难啊1 小时前
2026数字中国创新大赛数字安全赛道writeup之web题目一
java·前端·安全
后端AI实验室1 小时前
我用AI把一个外包需求从30天压到5天交付,然后客户说:下次还找你
java·ai