一文搞懂:什么是maven

简介: 一文搞懂:什么是maven

1.什么是maven


  Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。


  2.maven的作用


  1)依赖管理


  maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文 件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从 而找到这些 jar 包,再把这些 jar 包拿去运行。


  2)一键构建


  什么是构建? 指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个 过程称为构建。


   一键构建 指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。


  Maven 规范化构建流程如下:


  3.maven软件


  1)maven软件目录


  bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run


  boot:存放了一些 maven 本身的引导程序,如类加载器等


  conf:存放了 maven 的一些配置文件,如 setting.xml 文件


  lib:存放了 maven 本身运行所需的一些 jar 包


  2)maven安装验证


  通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装 成功。


  4.maven仓库


  maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven 软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是本地文 件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库 理解为缓存,有了本地仓库就不用每次从远程仓库下载了。


  (1)本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找


   (2)远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。 远程仓库可以在互联网内也可以在局域网内。


   (3//代码效果参考:http://hnjlyzjd.com/hw/wz_25450.html

)中央仓库 :在 maven 软件中内置一个远程仓库地址 ,它是中 央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。

    全局 setting 与用户 setting maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。 在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project 项目,它作为 maven 的全局配置。 如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user.dir} /.m2/settings.xml 目录中,${user.dir} 指 windows 中的用户目录。 maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。


  5.maven工程的认识


  1)maven工程的目录结构


  作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。 进入 src 目录后,我们发现它里面的目录结构如下:


  src/main/java —— 存放项目的.java 文件


  src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件


  src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类


  src/test/resources —— 测试资源文件


  target —— 项目输出位置,编译后的 class 文件会输出到此目录


  pom.xml——maven 项目核心配置文件


  6.maven常用的命令


  1)compile


  compile 是 maven 工程//代码效果参考:http://hnjlyzjd.com/hw/wz_25448.html

的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。

  2) test


  test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。


  3) clean


  clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。


  4)package


  package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。


  5) install


  install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。


  从运行结果中,可以看出: 当后面的命令执行时,前面的操作过程也都会自动执行,


  6)Maven 指令的生命周期


  maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”, 这三套生命周期分别是:


  Clean Lifecycle 在进行真正的构建之前进行一些清理工作。


  Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。


  Site Lifecycle 生成项目报告,站点,发布站点。


  1.maven工程要导入jar包的坐标,就必须要考虑解决jar冲突


  1)解决jar包冲突的方式一:


  第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。


  maven导入jar包中的一些概念:


  直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包


  传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。


  2)解决jar包冲突的方式二:


  路径近者优先原则。直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。


  3)解决jar包冲突的方式三:(推荐使用)


  直接排除法:当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。因为此时依赖包使用的版本和默认和本jar包一样。


  2.pom.xml文件中标签的认识


  build标签是在maven中添加插件


  dependencyManagement标签是锁定jar包版本(标签下的jar包没有导入jar包的作用 只是锁住的作用)


  对于开发A项目者,若是引用了另一个项目B,则B中pom文件中导入的jar包会传递到A项目中,属于传递依赖,对于A项目开发者若直接导入B项目中导入的jar包 ,对于A来说,这是直接依赖,


  那么直接依赖的jar包就会把我们B项目中传递过去的jar包覆盖掉,


  为了防止该种情况出现,可以把B项目中主要的jar包锁住,那么其他依赖该项目的项目中。即使有同名jar包直接依赖,也无法覆盖。


  统一管理jar包的版本


   jar包的坐标的版本用EL表示表示


  3.maven私服(window环境下的安装)


  下载nexus安装包,dos窗口以管理员身份进入nexus安装包的bin目录下执行 nexus.bat install 启动 执行nexus.bat start


  进入


  账户名和密码默认是admin admin123


  maven的setting文件配置自己的私服:


  自己的项目上传私服pom文件的配置


  从远程仓库下载jar包的settings配置

相关文章
|
数据采集 JSON 算法
Python爬虫——模拟登录
Python爬虫——模拟登录
1026 3
|
测试技术
编写测试用例
编写测试用例
386 7
|
2月前
|
自然语言处理 运维 安全
2026年OpenClaw(Clawdbot)一键部署教程+WhatsApp快速接入指南
OpenClaw(原Clawdbot/Moltbot)作为阿里云生态下的开源AI自动化代理工具,凭借跨地域交互、多语言支持、轻量化部署的核心优势,成为跨境企业、出海团队实现WhatsApp办公自动化的核心工具。2026年阿里云推出OpenClaw专属一键部署方案,结合WhatsApp在全球200+国家和地区的覆盖能力,实现“WhatsApp聊天窗口下达指令,OpenClaw自动执行跨境客户管理、多语言消息推送、海外业务自动化”的高效模式。本文将完整拆解阿里云环境下OpenClaw的一键部署流程,重点详解WhatsApp Business API申请、跨境网络适配、机器人对接调试的全步骤,包含实
2119 1
|
人工智能 计算机视觉 Python
【YOLOv8-Seg】实战二:LabVIEW+OpenVINO加速YOLOv8-seg实例分割
【YOLOv8-Seg】实战二:LabVIEW+OpenVINO加速YOLOv8-seg实例分割
1120 0
【YOLOv8-Seg】实战二:LabVIEW+OpenVINO加速YOLOv8-seg实例分割
|
1月前
|
安全 开发工具 git
【Git】Git 系统性使用指南(内含《核心Git命令速查表》)
这是一份全面、实用的Git系统性指南,涵盖基础配置、日常操作、分支管理、远程协作、撤销回退、标签与高级命令(如rebase、cherry-pick、bisect等),附带速查表、规范建议和最佳实践,适合开发者日常参考、团队协作及面试复习。
|
3月前
|
Rust 安全 Docker
使用 uv 一键创建并激活 Python 虚拟环境(附完整脚本)
本文介绍基于 `uv` 的自动化脚本 `activate_env.sh`,一键完成安装 uv、创建并激活虚拟环境、安装依赖及环境信息输出,提升 Python 项目初始化效率,适用于个人开发、团队协作与 CI/CD 场景。
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
682 2
|
4月前
|
存储 安全 Java
Java HashMap 全面解析:原理、用法与实战要点
本文深入解析Java中HashMap的底层原理与使用实践,涵盖其“数组+链表+红黑树”的结构演变、哈希计算、扩容机制及线程安全问题,详解常用方法、性能优化与最佳实践,助力开发者高效掌握这一核心数据结构。
1177 11