Maven概述

Maven概述

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具

maven的作用

  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
  • 统一项目结构:提供标准、统一的项目结构
  • 项目构建:标准跨平台的自动化项目构建方式

maven的安装

  1. 下载maven安装包 apache-maven-4.0.0-rc-2-bin
  2. 配置本地仓库:修改conf/settings.xml文件中的localRepository标签为一个指定目录
  3. 配置阿里云私服:修改conf/settings.xml文件中的mirror标签,为其添加如下子标签
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <mirrorOf>central</mirrorOf>
 </mirror>
  1. 配置环境变量:将maven安装目录下的bin目录添加到PATH环境变量中
  2. 验证:打开cmd窗口,输入mvn -v,如果出现如下信息,则表示安装成功

maven坐标的主要组成

  • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  • artifactld:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  • version:定义当前项目版本号

依赖管理

依赖配置

依赖:指当前项目运行时所需要的jar包,一个项目可以引入多个依赖

  1. 在 pom.xml中编写<dependencies>标签
  2. <dependencies>标签中 使用<dependency> 引入依赖
  3. 定义坐标的 groupld,artifactld,version
  4. 点击刷新按钮,引入最新加入的坐标

<dependencies>
    <!-- 每一个依赖-->
    <!--依赖的坐标信息-->
    <dependency>
        <!--组织名-->
        <groupld>ch.qos.logback</groupld>
        <!--依赖名称-->
        <artifactld>logback-classic</artifactld>
        <!--版本号-->
        <version>1.2.3</version>
    </dependency>
</dependencies>

注意

  • 如果本地依赖不存在,将会链接远程仓库/中央仓库,下载依赖项
  • 如果不知道依赖的坐标信息可以到maven官方网站中搜索

依赖传递

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。


<dependency>
    <groupld>com.itheima</groupld>
    <artifactld>maven-projectB</artifactld>
    <version>1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupld>junit</groupld>
            <artifactld>junit</artifactld>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

依赖的jar包,默认情况下,可以在任何地方使用。可以通过**<scope>..</scope>**设置其作用范围作用范围:

  • 主程序范围有效。(main文件夹范围内)
  • 测试程序范围有效。(test文件夹范围内)
  • 是否参与打包运行。(package指令范围内)

scope取值

scope主程序测试程序打包(运行)范例
compile(默认,全局有效)log4j
text (在测试程序范围有效)--junit
provided (在主程序和测试范围都有效,但不参与打包)-servlet-api
runtime-mysql、jdbc驱动

生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统-

Maven中有3套相互独立的生命周期:

  • clean:清理工作。
  • default:核心工作,如:编译、测试、打包、安装、部署等。
  • site:生成报告、发布站点等。

生命周期中的阶段:

  • clean:移除上一次构建生成的文件
  • compile:编译项目源代码
  • text:使用合适的单元测试框架运行测试(junit)
  • package:将编译后的文件打包,如:jar、war等
  • install:安装项目到本地仓库

使用idea创建SpringBoot项目

  1. 创建springboot工程,填写模块信息,并勾选web开发相关依赖
  2. 创建请求处理类HelloController,添加请求处理方法 hello,并添加注解
//Controller软件包
package com.springboot.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/hone")
    public String hello() {
        return "Hello World!";
    }
}

分模块设计与开发

  • 分模块设计:将项目按照功能拆分成多个子模块,方便项目的管理维护、拓展也方便模块间的相互调用,资源共享

继承

  • 概念:继承描述的是两个工程之间的关系,与java中的继承类似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
  • 作用:简化依赖配置、统一管理依赖
  • 实现<parent>...</parent>标签

maven继承关系的实现

  • 打包方式
  • jar:普通模块打包、springboot项目基本都是jar包(内嵌Tomcat运行)
  • warwar包,用于部署到外部Tomcat服务器上运行
  • pom: 父工程或聚合工程,该模块不写代码,仅进行依赖管理
  1. 创建maven父工程文件,需设置打包方式为pom
  • maven工程中,一个工程只能继承一个父工程

<packaging>pom</packaging>

  1. 在工程的pom.xml文件中,配置继承关系
  2. 在父工程中配置各个工程的共有依赖(子工程会自动继承父工程的依赖)

版本锁定

maven中,可以在父工程的pom文件中通过<dependencyManagement>标签,锁定子工程所依赖的版本,从而避免版本冲突

#父工程 pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupld>io.jsonwebtoken</groupld>
<artifactld>jjwt</artifactld>
#锁定子工程版本
<version>0.9.1</version>
</dependency>
</dependencies>
</dependencyManagement>

注意

  • 父工程锁定版本后,子工程在引入依赖时就无需指定依赖的版本号,依赖版本由父工程统一管理,变更依赖版本,只需在父工程中统一变更即可
  • <dependencyManagement>标签仅仅管理依赖的版本,不进行依赖的引入

dependencies标签与dependencyManagement标签的区别

  • dependencies标签用于引入依赖,是直接依赖,在父工程中配置了依赖,子工程就会直接继承下来
  • dependencyManagement标签用于管理依赖的版本,不进行依赖的引入,还需要在子工程中引入所需依赖(无需指定版本`)

自定义属性/引入属性

  • 自定义属性在pom.xml文件中以<properties>标签进行定义,自定义属性的引入,以${}进行引入
#定义自定义属性
<properties>
<lombok.version>2.6.3</lombok.version>
</properties>
#使用自定义属性
<dependencies>
<dependency>
<groupld>org.projectlombok</groupld>
<artifactld>lombok</artifactld>
<version>${lombok.version}</version>
</dependency>
</dependencies>

聚合

  • 功能:主要用于项目构建,将多个模块组织成一个整体,同时进行项目构建
  • 作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

聚合工程

  • 一个不具有业务功能的“空”工程(有且仅有一个pom.xml文件,没有源代码,没有测试代码,没有资源文件,没有web.xml 文件),一般使用父工程来做为聚合项目

使用

在一个maven工程中通过使用modules标签,设置当前聚合工程所包含的所有子模块的名称

#父工程 pom.xml
<modules>
<module>子工程1</module>
<module>子工程2</module>
</modules>

注意

  • 聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关

私服

  • 私服是一种特殊的远程仓库,他是架设在局域网内额仓库服务,用来代理位于外部的中央仓库,用来解决团队内部的资源共享与资源同步问题
上次更新 2025/11/30 18:15:43