Maven 核心知识整理

实习生JAVA知识总结目录 学习 阅读详情

一、Maven 介绍

1. 什么是 Maven?

Maven 是一个由 Apache 开源组织提供的项目构建与依赖管理工具。其核心功能可以概括为两点:

  • 依赖管理 (Dependency Management):对项目所依赖的第三方 jar包进行统一、规范的管理,自动解决依赖传递和版本冲突问题,实现“一键构建”。

  • 项目管理 (Project Management):提供了一套标准化的项目结构(约定优于配置)和一整套清晰的生命周期,用于完成项目的清理、编译、测试、打包、部署等构建过程。

2. Maven 的核心概念

  1. 仓库 (Repository)

    Maven 通过三种仓库来管理 jar包,形成一个高效的供应链:

    • 本地仓库 (Local Repository):位于开发者个人电脑上(默认路径:~/.m2/repository),用于缓存从远程仓库下载的构件。

    • 中央仓库 (Central Repository):由 Maven 社区维护的全球性远程仓库,包含了绝大多数开源项目的构件。访问速度可能较慢。

    • 私服 (Private Repository):架设在公司内部的远程仓库,作为中央仓库的镜像和缓存。优点:速度快、安全、可部署内部构件。

  2. 坐标 (Coordinates)

    坐标是 Maven 用来唯一标识一个构件(jar/war 等)​ 的定位地址,由三个基本元素组成,类似于数学中的三维坐标 (x, y, z)。

    • groupId: 定义项目所属的组织或公司(反写的公司域名 + 项目名)。例如:org.apache,com.hgxy

    • artifactId: 定义当前项目(模块)的名称。

    • version: 定义当前项目的版本号。

    <!-- 坐标示例:在 pom.xml 中声明依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>     <!-- 公司/组织 -->
        <artifactId>mybatis</artifactId>   <!-- 项目名称 -->
        <version>3.5.6</version>           <!-- 版本号 -->
    </dependency>

二、Maven 安装与配置

1. 下载与安装

  1. 访问 Apache Maven 官网下载最新版。

  2. 将压缩包解压到一个无中文、无空格的路径下,例如:D:\apache-maven-3.8.6。

2. 配置阿里云镜像仓库(加速下载)

为了提升依赖下载速度,需要修改 Maven 安装目录下 conf/settings.xml文件。

  1. 找到 <mirrors>标签。

  2. 在其中添加阿里云镜像配置:

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf> <!-- 表示对中央仓库的请求都转到此镜像 -->
    <name>Nexus aliyun</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

3. 配置本地仓库路径(可选但推荐)

默认的本地仓库路径在用户目录下的 .m2文件夹。可以自定义到一个更大的磁盘分区。

在 settings.xml中找到被注释的 <localRepository>标签,取消注释并修改:

<localRepository>D:\mvn_repository</localRepository> <!-- 自定义的本地仓库路径 -->

4. 配置环境变量(可选,方便命令行使用)

  • 新建系统变量 MAVEN_HOME,值为 Maven 的安装路径,如:D:\apache-maven-3.8.6

  • 在 Path变量中追加:%MAVEN_HOME%\bin

  • 验证:打开命令行,输入 mvn -v,看到版本信息即表示成功。


三、IDEA 集成 Maven

1. 全局配置(推荐)

在 IDEA 中一次配置,所有新建项目都会生效。

  • 路径:File-> Settings-> Build, Execution, Deployment-> Build Tools-> Maven

  • 关键配置:

    • Maven home path: 指向你的 Maven 安装目录。

    • User settings file: 指向你修改过的 settings.xml文件(确保已配置阿里云镜像)。

    • Local repository: 此处会自动读取上一步配置的本地仓库路径。

2. Maven 项目标准目录结构

创建 Maven 项目后,会自动生成以下约定俗成的目录结构:

your-project
├── src
│   ├── main
│   │   ├── java         # 存放项目的 Java 源代码
│   │   └── resources    # 存放项目的主配置文件(如:mybatis-config.xml, spring.xml)
│   └── test
│       ├── java         # 存放项目的测试代码(如:Junit 测试)
│       └── resources    # 存放测试相关的配置文件
├── target               # 项目构建输出目录(编译后的 class 文件,打包的 jar/war 等)
└── pom.xml             # Maven 项目的核心配置文件

3. 添加与下载依赖

在项目的 pom.xml文件的 <dependencies>标签内,添加所需的依赖坐标。IDEA 会自动从远程仓库下载依赖到本地仓库。

4. 解决依赖下载失败问题

下载过程中若网络中断,会生成以 .lastUpdated结尾的文件,导致后续无法继续下载。

  • 解决方案:

    1. 删除本地仓库中对应依赖文件夹下的所有 .lastUpdated文件。

    2. 或者在 IDEA 中执行 Maven面板的 Reload project按钮,强制重新下载。


四、Maven 生命周期

Maven 的生命周期 (Lifecycle) 由一系列有序的阶段 (Phase) 组成,执行后面的阶段会自动执行前面所有的阶段。

  • 清理周期 (clean):mvn clean

    • 删除 target目录,清理上次构建的结果。

  • 默认周期/构建周期 (default):最核心的生命周期。

    • compile: 编译主程序的源码。

    • test: 使用单元测试框架(如 JUnit)运行测试。

    • package: 将编译后的代码打包成指定格式(jar/war)。

    • install: 将打好的包安装到本地仓库,供其他本地项目依赖。

    • deploy: 将最终的包复制到远程仓库(私服),供其他开发者或项目共享。

  • 站点周期 (site):mvn site

    • 生成项目的站点文档。


五、依赖冲突与解决方案

当项目引入的多个依赖,间接引入了同一个 jar包的不同版本时,就会产生依赖冲突。Maven 有内置的调解原则,但我们也需掌握手动解决方案。

Maven 内置调解原则:

  1. 路径近者优先原则:依赖传递路径短的版本优先。直接依赖 > 间接依赖。

  2. 第一声明者优先原则:在 pom.xml中,同层级的依赖声明,谁声明在前,谁的版本就被采用。

手动解决方案:

  1. 排除依赖 (Exclusion)

    不想要某个依赖传递进来的特定版本,可以将其排除。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.8.RELEASE</version>
        <exclusions>
            <exclusion>
                <!-- 排除 spring-context 所依赖的 spring-core 5.1.8 -->
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  2. 版本锁定 (Dependency Management)

    在父工程或当前工程的 <dependencyManagement>标签中,统一声明依赖的版本。这是最推荐、最常用的方式。

    <properties>
        <!-- 定义版本号属性,便于统一管理 -->
        <spring.version>5.2.0.RELEASE</spring.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version> <!-- 引用上面定义的属性 -->
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <!-- 在 dependencies 中引用时,无需再写版本号 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId> <!-- 版本被锁定为 5.2.0 -->
        </dependency>
    </dependencies>

六、依赖作用域 (Scope)

<scope>标签用于控制依赖在编译、测试、运行、打包等不同阶段的有效性。

Scope

对主代码(classpath)有效

对测试代码有效

会打包发布

典型示例

compile

✅

✅

✅

Spring-Core

test

❌

✅

❌

JUnit

runtime

❌

✅

✅

MySQL 驱动

provided

✅

✅

❌

Servlet-API, Tomcat


七、聚合与继承(多模块项目)

在大型项目中,通常会将一个项目拆分为多个模块(如:dao, service, web)进行开发。Maven 的聚合与继承特性完美支持此模式。

1. 概念与关系

  • 聚合 (Aggregation):一个父模块(通常打包方式为 pom)通过 <modules>将多个子模块组织在一起。对父模块执行 Maven 命令,会传递到所有子模块。

  • 继承 (Inheritance):子模块通过 <parent>标签继承父模块的 pom.xml配置,从而统一管理依赖版本、插件等。

2. 标准项目结构

maven-parent (父工程,pom)
├── maven-dao (子模块,jar)
├── maven-service (子模块,jar,依赖 maven-dao)
└── maven-web (子模块,war,依赖 maven-service)

3. 关键配置示例

  • 父工程 (maven-parent) 的 pom.xml

    <groupId>com.hg</groupId>
    <artifactId>maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging> <!-- 打包方式必须为 pom -->
    
    <!-- 聚合:声明所有子模块 -->
    <modules>
        <module>maven-dao</module>
        <module>maven-service</module>
        <module>maven-web</module>
    </modules>
    
    <!-- 继承:在 dependencyManagement 中统一管理依赖版本 -->
    <dependencyManagement>
        <dependencies>
            <!-- 这里声明所有公共依赖及其版本 -->
        </dependencies>
    </dependencyManagement>
  • 子模块 (maven-service) 的 pom.xml

    <!-- 继承父工程 -->
    <parent>
        <groupId>com.hg</groupId>
        <artifactId>maven-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <artifactId>maven-service</artifactId>
    <packaging>jar</packaging>
    
    <dependencies>
        <!-- 依赖另一个子模块 maven-dao -->
        <dependency>
            <groupId>com.hg</groupId>
            <artifactId>maven-dao</artifactId>
            <version>${project.version}</version> <!-- 版本与父工程一致 -->
        </dependency>
        <!-- 其他依赖无需再写版本号(如果在父工程dependencyManagement中已声明)-->
    </dependencies>
银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例 文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal... 阅读详情

相关推荐

Blender SMPL-X 插件安装

Blender XMPL-X 插件安装

heleneveryday的专栏 5358

Maven 学习资料汇总

Maven 学习资料汇总 1、maven 入门资料(讲解非常清晰明了,比我自己做的笔记还要好) http://www.cnblogs.com/luotaoyeah/archive/2014/06/02/3764533.html http://www.cnblogs.com/bluedy1229/p/3773794.html 说明:如果 pom.xml 右键 mvn install 出现问题,

李威威的博客 1862

海思Hi3516CV610--SPI NAND Flash移植实战:从手册到驱动的完整适配

本文详细介绍了海思Hi3516CV610芯片上SPI NAND Flash的移植实战,包括从手册解读到驱动适配的完整流程。以GD5F2GM7UEYIGR Flash为例,重点讲解了关键参数确认、模式选择、时序配置以及U-Boot和Linux内核驱动的具体实现步骤,帮助开发者快速完成Flash移植工作。

weixin_29158413的博客 446

maven学习记录:maven专栏简介

maven专栏简介一、我之前自己写的有关maven的博客:二、Maven 特点三、Maven POM1、介绍POM2、父(Super)POM四、此专栏的意义 一、我之前自己写的有关maven的博客: 再写这个专栏前我自己写过一些零零散散的maven相关博客,在以下链接中: linux下安装maven:https://editor.youkuaiyun.com/md/?articleId=120284931 详细解读Maven中pom.xml:https://editor.youkuaiyun.com/md/?articleId=

qq_47346664的博客 187

labview设置工业摄像头外部触发

使用labview对海康MV-CA013-GM相机设置外部触发。 一、硬件部分 1、硬件引脚定义 2、触发模式设置 相机的触发模式分为两种,一种是内触发模式、另外一种是外触发模式。 3、接线图 信号线的地要跟给信号的设备共地。信号线给高电平时触发拍照。 二、软件部分 1、创建vision acquisition 2、选择使用的摄像头。 3、选择模式。 4、在Acquisition Control中设置这些选项。 5、设置保存图片路径 设置保存路径和保存图片的格式。点击完成即可 参考:https:/

qq_43493715的博客 5665

如何下载最新版本的VMware Workstation

随着虚拟化技术的发展,VMware Workstation作为行业领先的桌面虚拟化软件,为用户提供了在单一物理计算机上运行多个操作系统的能力。本文将详细介绍如何从Broadcom支持网站下载最新的VMware Workstation Pro版本。

安呀智数据坊的博客 665

基础框架学习

常用框架入门

qq_36933261的博客 1015

海康视觉相机驱动软件MVS参数配置全攻略(附接线图+避坑指南)

本文提供了海康视觉相机驱动软件MVS从硬件连接到软件参数配置的完整指南。详细解析了供电与通讯线缆的区分、PNP/NPN信号逻辑的接线避坑方法,并重点阐述了MVS软件中触发模式、网络IP配置、图像采集及光源控制等核心参数的设置技巧,旨在帮助用户快速完成相机调试,实现稳定高效的图像采集。

weixin_29204205的博客 396

Android知识链接

https://www.cnblogs.com/plokmju/p/gradle_res.htmlhttps://mvnrepository.com/artifact/io.grpc/grpc-stubhttps://developer.android.com/studio/debug/logcat?hl=zh-cn#negation-and-regexhttps://www.androidperformance.com/2024/03/27/Android-Perfetto-101/#/Perfetto-

lxiao_3028的博客 150

极智量化平台实战:5分钟教你用Python实现双均线交易策略(附完整代码)

本文详细介绍了如何在极智量化平台上使用Python实现双均线交易策略,包括数据获取、信号生成、回测分析和策略优化。通过完整的代码示例和实战演示,帮助开发者快速掌握量化交易系统的基本原理和应用方法,实现自动化交易。

weixin_29269441的博客 487

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2838

Java面试题整理_P2

Spring boot核心讲解

weixin_59834709的博客 592

lammps后处理:堆垛层错和孪晶的数量统计

python调用ovito包可以免费实现ovito pro版本的功能,不需要安装ovito pro软件,如统计位错线长度、CNA结构、键角分布等,如需深入学习,可考虑报名python ovito后处理课程,或lammps一对一课程。lammps金属变形模拟中,可能会产生堆垛层错或者孪晶等结构,但是ovito免费版本无法统计这些结构的数量。使用python和ovito软件包,则可以方便的统计出这些结构的数量。大家好,我是小马老师。

lammps_jiayou的博客 464

精选Java基础【82~113企业真题】附答案

本文摘要: 索引相关:错误描述是"过多的索引只会阻碍性能提升"(C),正确使用索引可提升性能。 锁机制:共享锁允许其他事务读取数据(A正确),排他锁则禁止其他事务读写。 全表扫描:当表有多个索引且包含过滤字段时,Oracle不会使用全表扫描(D)。 Spring组件:拦截器用于请求增强(如权限验证),过滤器处理编码等问题,监听器管理应用生命周期。 ThreadLocal:实现线程安全存储,常用于数据库连接管理。 技术要点:包括TCP三次握手、Maven依赖范围、MyBatis防SQL注入

2501_93507003的博客 2041

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GitHub已封杀!锤爆面试官的Java面试手册真就无敌了?

前言 又是一年的金九银十,各位已经准备良久的朋友们又在摩拳擦掌,跃跃欲试了!前两天有位粉丝给小编投稿,说他受水滴面试邀请,他满心欢喜地去参加了此次的面试,但是面试的结果却像是一盆冷水泼在了他的头上。随即我就问他到底发生了什么,他说道:“”太惨了,数据库血崩。11个问题我只能回答两三个。。接下来要去恶补shell没用过,maven的面试题没准备过,垃圾收集器不会,throw和throws混淆,servlet忘了" 哎。。那么对于这位粉丝的经历呢,我也是深表同情,为此我也是网罗了2021年所有大厂的高频面试题

Fightevery的博客 172

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

36大数据和about云的文章总结

36大数据: 白话机器学习 http://www.36dsj.com/archives/78385 基于Hadoop的数据仓库Hive 基础知识(写的很好) http://www.36dsj.com/archives/77993 各种编程语言的深度学习库整理-机器学习-about云开发 http://www.aboutyun.com/thread-15262-1-1.html ...

weixin_30747253的博客 91

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[3-01-04].第04章:框架方案 - MyBatis笔记

MyBatis学习大纲

F-T-er 385

java最核心知识点整理

Java核心知识点整理 Java相关的知识点,业界的大牛已经整理的很好,在此只是引用借鉴。 目录 1 常见面试题 2 基础知识点 2.1 集合框架 2.2 工具类库 2.3 单元测试 2.4日志 3 并发编程 3.1 基础知识 3.2 并发理论 3.3 并发关键字 3.4 Lock 3.5并发容器 3.6线程池 3.7原子操作类 3.8并发工具 3.9并发实践 4 常用工具 4.1 IDEA 4.2 Maven 4.3 Git 1 常见面试题 序号...

a980150976的专栏 262

Maven知识整理

目前所有的项目都在使用maven,可是一直没有时间去整理,这两天正好有时间,好好的整理一下。 1为什么使用Maven这样的构建工具【Why】 1.1 一个项目就是一个工程 如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。 借助于maven就可以将一个项目拆分成多个工程。 1.2项目中使用jar包,需要“复制”、“粘贴”项目的lib中...

weixin_41217242的博客 187

Maven相关知识整理

MavenMaven基础Maven简介Maven基础概念依赖管理生命周期与插件Maven高级 Maven基础 Maven简介 Maven基础概念 依赖管理 生命周期与插件 Maven高级

一直在路上的小开发 1038

Maven基础理论知识整理

1.maven是什么? Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。...

笑小枫 9538

Maven 学习整理

Maven 是 Apache 基金会推出的一个用于管理和构建 Java 项目的工具。它基于项目对象模型 (Project Object Model , 简 称: POM) 的概念,通过描述项目的依赖、结构、生命周期等,简化项目管理。

cyt涛的博客 2020

maven学习整理-进阶知识

在maven的阶知识主要学习的是maven在eclipse中的使用、依赖相关的问题、继承(父子工程)、统一版本管理、聚合等相关知识 1.maven在eclipse中的使用 由上篇基础知识学习到怎样下载安装maven,先在我们将下载好的配置到ecllipse中 选择Window->Preferences->Maven->Installations-&...

W601486757的博客 328

构建工具-Maven-相关知识-整理专题

整理自己脑袋中、收藏中的那些资料,来一次清空,让自己重新开始。整理这篇的起点是本人已经会使用 Maven,并且已经使用了一年多,所以我个人觉得这篇文章对完全不懂 Maven 来讲是有压力的,但是对于刚刚入门 Maven 的人是有帮助的。如果你认为一篇文章就可以让你完全了解 Maven,那你是在鄙视官网帮助文档书写者。以此篇为引,希望可以得到你的建议,我只想成长,真心感谢!(鞠躬) 先总结

M_0307的博客 514

Maven是什么?有什么作用?Maven的核心内容简述

1、Maven是什么? Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。 传统工程我们直按把jar包放置在项目中, Maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。不使用Maven工具,当做 Java 项目需要第三方依赖包时,将别人打好的 Jar 包下载到本地,然后手动指定给项目。另外,比如版本控制,需要新版本...

King_wq_2020的博客 6万+

不愧是Alibaba技术官,我是如何收割多家大厂offer的

前言 大厂面试真题向来都是各大求职者的最佳练兵场,而今天小编带来的便是“HUAWEI”面经!这是一次真实的面试经历,虽然不是我自己亲身经历但是听当事人叙述后便会深有同感(因为我朋友差点就与offer擦肩而过了,总共4面技术5面HR,真的好艰难)。为此,我也将这面经整理出来分享给每位程序员(媛)朋友做一个参考,可知“HUAWEI”在Java开发工程师招聘中有哪些技术性考察和倾向! 架构筑基 大家都知道,性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,如果想成为一名优秀的架构

m0_57066131的博客 96
上一篇: MyBatis知识整理----(第三部分)
下一篇: JDBC全套核心知识点整理(从入门到封装)
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值