Maven依赖管理和项目构建工具


maven下载地址 : https://maven.apache.org/download.cgi

定义

Maven是Apache基金会推出的Java项目管理工具,核心定位是"依赖管理"与"项目构建自动化"。

其本质是基于项目对象模型(POM)的工具,通过XML格式的pom.xml文件描述项目信息、依赖关系及构建规则。

由于Maven自身基于Java开发,运行前必须确保系统已配置JAVA_HOME环境变量,且JDK版本需与Maven版本匹配(如Maven 3.8.x最低支持JDK 7,Maven 3.9.x最低支持JDK 8)。

核心功能

  • 依赖管理:通过GAV(groupId、artifactId、version)三元组唯一标识每个依赖包,实现依赖的精准定位。Maven会自动解析依赖的传递关系(如依赖A包含依赖B,则无需手动导入B),并通过"依赖调解机制"解决版本冲突。同时,Maven支持依赖的scope(作用域)控制,实现不同环境下的依赖隔离,还能通过本地仓库缓存已下载依赖,避免重复网络请求。

  • 项目构建:将传统Java项目的"清理→编译→测试→打包→部署"流程标准化、自动化。无论开发人员使用IDEA、Eclipse还是命令行,只要基于同一pom.xml配置,就能获得完全一致的构建结果,彻底解决"本地能跑、线上报错"的环境一致性问题。此外,Maven支持自定义构建流程,通过插件扩展实现代码检查、文档生成等附加功能。

  • 项目聚合与继承:对于多模块项目(如微服务架构),Maven可通过聚合功能批量构建所有模块,通过继承功能统一管理依赖版本,极大减少配置冗余,提升项目维护效率。

  • 跨平台与生态兼容:Maven基于Java开发,可运行于Windows、Linux、Mac等所有支持JVM的系统。其拥有庞大的中央仓库(Maven Central),包含数百万开源项目的依赖包,同时支持私有仓库搭建,满足企业内部项目的依赖管理需求。

GAVP属性

GAVP是Maven项目在仓库中的唯一标识组合,每个属性都有明确的语义和命名规范,是依赖管理的核心基础:

  • groupId(组织标识):通常采用"域名倒写+项目组"的格式,用于区分不同组织或公司的项目,确保全球唯一。例如阿里的groupId多为"com.alibaba",Spring官方的groupId为"org.springframework",个人项目可使用"com.github.用户名"格式。

  • artifactId(项目标识):用于区分同一组织下的不同项目,通常为项目的英文名称,需简洁且具有辨识度。例如Spring的核心容器项目artifactId为"spring-context",阿里的数据库连接池artifactId为"druid"。

  • version(版本号):遵循"主版本.次版本.修订版本"的语义化版本规范,常见格式包括:快照版(1.0-SNAPSHOT,用于开发中版本,支持自动更新)、正式版(1.0-RELEASE,用于生产环境,版本固定)、里程碑版(1.0-M1,用于测试关键功能)。

  • packaging(打包类型):决定项目的构建输出格式,不同类型对应不同的项目场景,具体分为三类:

  • jar:默认打包类型,将项目编译后的class文件及资源文件压缩为JAR包,适用于工具类库、后台服务(如Spring Boot项目)等非Web项目。JAR包可直接作为依赖被其他项目引用,也可通过java -jar命令独立运行。

  • war:Web应用专属打包类型,包含JSP、Servlet、静态资源等Web相关文件,输出为WAR包,需部署到Tomcat、Jetty等Web服务器才能运行,适用于传统SSM Web项目。

  • pom:聚合或继承项目的专用打包类型,此类项目本身不包含业务代码(需删除src目录),仅用于管理子模块或统一依赖版本,是多模块项目的核心管理节点。

  • 其他类型:除核心三类外,Maven还支持ear(企业级应用打包,包含多个war和jar)、maven-plugin(Maven插件打包)等特殊类型,需通过插件扩展实现。

2. 安装与配置

下载安装

Maven采用绿色免安装模式,核心安装步骤如下:

  1. 版本选择:根据项目JDK版本选择匹配的Maven版本(如JDK 8推荐Maven 3.6.x,JDK 17推荐Maven 3.8.x及以上),避免版本不兼容问题;
  2. 下载地址:官网(maven.apache.org)的"Download"栏目,选择"Binary zip archive"类型下载,无需下载源码包;
  3. 解压规范:解压路径需绝对避免中文、空格及特殊字符(如"-""@"),推荐路径如"D:\DevTools\maven-3.8.8",便于后续环境变量配置;
  4. 版本兼容性:3.8.8版本需JDK 7及以上支持,3.9.0及以上版本需JDK 8及以上支持,安装前需通过"java -version"验证JDK环境是否正常。

环境变量配置

  1. 配置MAVEN_HOME:Windows系统中,右键"此电脑"→"属性"→"高级系统设置"→"环境变量",在"系统变量"中新增MAVEN_HOME,变量值为Maven的安装根路径(如"D:\DevTools\maven-3.8.8");Linux/Mac系统中,在/etc/profile或~/.bash_profile文件中添加"export MAVEN_HOME=安装路径"。

  2. 配置Path变量:Windows系统在系统变量的Path中添加"%MAVEN_HOME%\bin";Linux/Mac系统添加"$MAVEN_HOME/bin",实现mvn命令的全局调用。

  3. 验证配置 :Windows打开新的cmd窗口(避免环境变量未生效),Linux/Mac执行"source /etc/profile"刷新配置后,输入mvn -v命令。若输出Maven版本、Java版本及系统信息,说明配置成功;若提示"mvn不是内部或外部命令",需检查MAVEN_HOME路径是否正确及Path配置是否生效。

核心配置(conf/settings.xml)

  • 本地仓库配置 :本地仓库是Maven缓存依赖包的核心目录,默认位于用户目录下的.m2/repository(如C:\Users\ZhangSan.m2\repository),该路径可能因C盘空间不足或权限问题需要修改。配置方法:在conf/settings.xml的标签中指定自定义路径(如D:\MavenRepo),路径需使用正斜杠"/"或双反斜杠"\",且确保目录有读写权限。修改后,Maven下载的所有依赖会自动存储到该目录,可实现依赖的复用和迁移。
    <localRepository>D:\MavenRepo</localRepository>

  • 国内镜像配置:Maven默认从中央仓库(位于国外)下载依赖,速度极慢,需配置国内镜像加速。常用镜像包括阿里云、华为云等,其中阿里云镜像覆盖全面且稳定性高。配置规则:在settings.xml的标签内添加镜像配置,central表示镜像中央仓库。若需镜像所有仓库,可设置为*,但需注意部分私有仓库可能被屏蔽。

xml 复制代码
  `<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>central</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
  </mirror&gt;
  <!-- 若需使用Spring专属镜像,可补充 -->
  <mirror>
  <id>aliyunspring</id>
  <mirrorOf>spring</mirrorOf>
  <name>阿里云Spring仓库</name>
  <url>https://maven.aliyun.com/repository/spring</url>
  ` `</mirror>`
  • JDK编译版本配置:Maven默认使用JDK 1.5进行编译,而实际项目多使用JDK 8及以上版本,需在settings.xml的标签中配置默认JDK版本。以JDK 17为例,配置后所有Maven项目会默认使用JDK 17编译,无需在每个pom.xml中单独配置。其中true表示该配置自动生效。
xml 复制代码
<profile>
  <id>jdk-17</id>
  <activation>
      <activeByDefault>true</activeByDefault>
      <jdk>17</jdk>
  </activation>
  <properties>
      <maven.compiler.source>17</maven.compiler.source>
      <maven.compiler.target>17</maven.compiler.target>
      <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  </profile>
  • 代理配置(企业环境) :若企业内部网络通过代理访问外网,需在settings.xml中配置代理信息。在标签内添加代理配置,包含代理类型、地址、端口及认证信息(若有)。配置示例:

    xml 复制代码
    <proxy>
    <id>company-proxy</id>
    <active>true</active>
    <protocol>http</protocol>
    <host>192.168.1.100</host>
    <port>8080</port>
    <username>proxyUser</username>
    <password>proxyPass</password>
    <nonProxyHosts>localhost|127.0.0.1|*.company.com</nonProxyHosts>
    </proxy>
    复制代码
    其中<nonProxyHosts>用于指定无需代理的地址,多个地址用"|"分隔。

IDEA配置

IDEA默认集成Maven,但为确保与本地配置一致,需手动指定Maven路径及配置文件,步骤如下:1. 打开IDEA,进入"File→Settings→Build, Execution, Deployment→Build Tools→Maven"(Windows)或"IntelliJ IDEA→Settings→Build, Execution, Deployment→Build Tools→Maven"(Mac);2. 配置核心参数:

  • Maven home path:选择"Local",并指定本地Maven的安装根路径(如"D:\DevTools\maven-3.8.8"),避免使用IDEA自带的Maven版本,确保环境一致性。

  • User settings file:勾选"Override",指定本地Maven的conf/settings.xml路径(如"D:\DevTools\maven-3.8.8\conf\settings.xml"),使IDEA使用自定义的镜像和JDK配置。

  • Local repository:无需手动修改,IDEA会自动读取settings.xml中配置的本地仓库路径,若未同步可点击"Refresh"按钮刷新。

  • 额外配置:在"Maven→Runner"中,可配置VM Options(如"-Xms128m -Xmx512m"优化Maven内存),并勾选"Delegate IDE build/run actions to Maven",使IDEA的构建动作委托给Maven执行,确保与命令行构建结果一致。

配置完成后,点击"Apply→OK",IDEA会自动加载Maven配置,新建或导入Maven项目时即可使用自定义的Maven环境。

  • Maven home path:Maven安装根路径

  • User settings file:conf/settings.xml路径

  • Local repository:自定义的本地仓库路径

3. 项目创建与结构

JavaSE工程创建

JavaSE工程的创建分为"IDEA图形化操作"和"命令行创建"两种方式,适用于不同场景:

方式一:IDEA图形化创建(推荐)
  1. 打开IDEA,点击"File→New→Project",选择"Empty Project",输入项目名称(如"MavenSEDemo")和存储路径,点击"Create"。

  2. 右键空项目→"New→Module",左侧选择"Maven",点击"Next"。

  3. 配置GAV信息:GroupId(如"com.example")、ArtifactId(如"javase-demo")、Version(默认1.0-SNAPSHOT),点击"Next"。

  4. 确认模块名称和路径,点击"Finish"。IDEA会自动创建标准Maven目录结构,并下载默认依赖(如maven-compiler-plugin)。

方式二:命令行创建(适用于无IDE环境)

打开cmd或终端,进入目标目录,执行以下命令:

bash 复制代码
mvn archetype:generate -DgroupId=com.example -DartifactId=javase-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

其中"maven-archetype-quickstart"是JavaSE项目的原型,会自动生成包含主类和测试类的基础结构。执行完成后,目标目录下会生成javase-demo项目文件夹,包含完整的Maven结构。

创建完成后,IDEA中通过"File→Open"导入生成的项目即可。

JavaEE(Web)工程创建

  • 手动创建(深入理解Web结构)

  • 按JavaSE工程创建步骤创建基础模块,ArtifactId设为"web-demo"。

  • 补全Web目录结构:在src/main下新建"webapp"文件夹(Web应用根目录),在webapp下新建"WEB-INF"文件夹,在WEB-INF下新建web.xml文件(Web应用配置文件)。web.xml的基础内容如下(以Servlet 4.0为例):

  • 修改pom.xml的打包类型:将jar改为war,并添加Servlet API依赖(作用域为provided,避免与服务器冲突):

  • 刷新Maven工程:右键模块→"Maven→Reload Project",若webapp目录出现小蓝点,说明Web工程配置成功。

  • 插件创建(高效快捷)


  • 安装JBLJavaToWeb插件:打开IDEA→"File→Settings→Plugins",搜索"JBLJavaToWeb",点击"Install"并重启IDEA。

  • 按JavaSE工程创建步骤创建基础模块,ArtifactId设为"web-demo-plugin"。

  • 右键模块→"Add Framework Support",勾选"Web Application",选择Servlet版本(如4.0),点击"OK"。插件会自动补全webapp/WEB-INF/web.xml结构,并将pom.xml的打包类型改为war。

  • 刷新Maven工程:右键模块→"Maven→Reload Project",完成Web工程创建。此方式适用于快速开发,避免手动创建目录的繁琐。

  • 清理阶段(clean):

  • 执行mvn clean命令,删除target目录及其下所有文件,清除上一次构建的产物,为新构建做准备。

  • 编译阶段(compile):

  • 执行mvn compile命令,将src/main/java下的Java源代码编译为class文件,输出到target/classes目录,并将src/main/resources下的资源文件复制到target/classes目录。

  • 测试编译阶段(test-compile):

  • 执行mvn test-compile命令,将src/test/java下的测试源代码编译为class文件,输出到target/test-classes目录,为后续测试做准备。该阶段会自动触发compile阶段。

  • 测试阶段(test):

  • 执行mvn test命令,运行target/test-classes下的单元测试用例(如JUnit测试),输出测试报告(位于target/surefire-reports目录)。该阶段会自动触发compile和test-compile阶段,若测试失败(如断言不通过),构建会终止。

  • 打包阶段(package):

  • 执行mvn package命令,根据pom.xml的packaging类型,将target/classes下的资源和class文件打包为jar、war等格式的文件,输出到target目录。例如jar项目生成"artifactId-version.jar",war项目生成"artifactId-version.war"。该阶段会自动触发前序所有阶段。

  • 安装阶段(install):

  • 执行mvn install命令,将package阶段生成的jar/war包安装到本地仓库(settings.xml配置的localRepository),使该项目可作为依赖被本地其他项目引用。例如将javase-demo-1.0-SNAPSHOT.jar安装到本地仓库后,其他项目可通过GAV信息导入该依赖。

  • 部署阶段(deploy):

  • 执行mvn deploy命令,将package阶段生成的文件部署到远程仓库(如企业私服),使团队其他成员可共享该项目依赖。该阶段需在pom.xml中配置节点指定远程仓库地址,且需远程仓库的访问权限。

  • 命令行构建(跨平台通用):

  • 命令行构建是Maven的核心使用方式,不受IDE限制,适用于服务器环境或自动化部署。使用前需进入pom.xml所在的项目根目录,常用命令及说明如下:

    1. 命令作用备注mvn clean清理构建产物删除target目录,常用于重新构建前mvn compile编译主程序代码输出class文件到target/classesmvn test执行单元测试需配合JUnit等测试框架,输出测试报告mvn clean package清理并打包生成jar/war包到target目录,自动执行前序阶段mvn clean install清理并安装到本地仓库供本地其他项目依赖使用mvn clean deploy清理并部署到远程仓库需配置远程仓库信息mvn package -DskipTests打包并跳过测试用例执行测试代码仍会编译,仅不执行测试mvn package -Dmaven.test.skip=true打包并跳过测试代码编译和执行适用于测试代码报错但需紧急打包的场景
  • IDEA可视化构建(便捷高效) :IDEA提供了直观的Maven可视化面板,无需记忆命令,操作步骤如下:

    打开Maven面板:IDEA右侧边栏点击"Maven",展开项目模块。

  • 执行生命周期阶段:展开"Lifecycle"节点,双击对应阶段(如clean、compile、package)即可执行构建。

  • 组合命令执行:按住Ctrl键,选中多个阶段(如clean和package),右键"Run Maven Build",实现命令组合执行。

  • 结果查看:构建过程和结果会在IDEA底部的"Run"面板显示,若构建成功会提示"BUILD SUCCESS",失败则显示具体错误信息(如依赖缺失、编译错误)。

标准目录结构

text 复制代码
|-- pom.xml               # Maven核心配置文件
|-- src
    |-- main              # 主代码目录
    |   |-- java          # Java源代码(按包结构组织)
    |   |-- resources     # 配置/静态资源
    |   `-- webapp        # Web项目专属目录(含页面及WEB-INF)
    `-- test              # 测试代码目录
        |-- java          # 单元测试代码
        `-- resources     # 测试资源
|-- target                # 构建输出目录(含class、jar/war等)

4. 项目构建

构建流程

清理(clean,删除target)→ 编译(compile,生成class)→ 测试(test,执行单元测试)→ 打包(package,生成jar/war)→ 部署(install本地仓库/deploy私服)

构建方式

  • 命令行 :进入pom.xml同级目录,执行相关命令

    清理:mvn clean

  • 重新打包:mvn clean package

  • 多命令组合:mvn 命令1 命令2

可视化:IDEA中通过Maven面板的Lifecycle节点双击触发对应动作

构建周期

Maven的构建生命周期(Lifecycle)是一组有序的构建阶段集合,每个生命周期相互独立,包含的阶段也不同。Maven核心包含三个生命周期,分别对应不同的构建目标:

  • 清理生命周期(Clean Lifecycle) :专注于清理构建产物,包含三个阶段:
    pre-clean:清理前的准备工作(如备份旧产物),默认无实现

  • clean:核心清理阶段,删除target目录

  • post-clean:清理后的后续工作(如删除临时文件),默认无实现

Plain 复制代码
mvn clean
  • 默认生命周期(Default Lifecycle) :Maven的核心生命周期,包含项目构建的完整流程,常用阶段及执行顺序如下(按从左到右执行):
    validate → initialize → generate-sources → process-sources → generate-resources → process-resources → compile → process-classes → generate-test-sources → process-test-sources → generate-test-resources → process-test-resources → test-compile → process-test-classes → test → prepare-package → package → pre-integration-test → integration-test → post-integration-test → verify → install → deploy其中常用阶段为compile、test、package、install、deploy,执行后续阶段会自动触发所有前置阶段。例如执行mvn install会依次执行从validate到install的所有阶段。

  • 报告生命周期(Site Lifecycle) :用于生成项目文档站点,包含项目说明、依赖报告、测试报告等,常用阶段:
    site:生成项目站点文档(HTML格式)

  • site-deploy:将站点文档部署到远程服务器

Plain 复制代码
mvn site
  • 核心特性 :1. 阶段依赖 :触发后续命令会自动执行前置命令,如执行mvn package会自动执行compile、test等前置阶段,无需手动依次执行;2. 插件绑定 :每个生命周期阶段都绑定了默认的Maven插件,如compile阶段绑定maven-compiler-plugin,package阶段绑定maven-jar-plugin,用户也可自定义插件绑定,扩展阶段功能;3. 跨生命周期执行 :可同时执行不同生命周期的阶段,如mvn clean package site,依次执行clean生命周期的clean阶段、默认生命周期的package阶段、报告生命周期的site阶段。

5. 依赖管理与POM配置

依赖导入

依赖导入是Maven项目开发的基础操作,核心是获取正确的GAV信息并配置到pom.xml中。完整流程及技巧如下:

1. 获取依赖GAV信息的常用途径
  1. Maven中央仓库官网 :访问https://mvnrepository.com/,搜索依赖名称(如"druid""spring-core"),选择对应版本,复制生成的XML代码。官网提供了各版本的兼容性信息和使用统计,便于选择稳定版本。

  2. IDEA Maven Search插件:在IDEA中安装"Maven Search"插件,右键pom.xml→"Maven Search",搜索依赖名称并选择版本,插件会自动将GAV配置添加到节点中,无需手动复制。

  3. 框架官方文档:Spring Boot、MyBatis等框架的官方文档会提供对应的Maven依赖配置,确保依赖版本与框架版本兼容(如Spring Boot 3.x需搭配Spring 6.x依赖)。

2. 依赖配置格式及说明

获取GAV信息后,将其配置在pom.xml的节点中,每个代表一个依赖。基本格式如下,其中为可选属性,默认值为compile:

xml 复制代码
<dependencies>
   <!-- 示例1:阿里巴巴Druid连接池依赖 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.18</version>
        &lt;scope&gt;compile&lt;/scope&gt; <!-- 可选,默认compile -->
    &lt;/dependency&gt;
    <!-- 示例2:JUnit 5测试依赖 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.9.2</version>
        <scope>test</scope> <!-- 仅测试环境使用 -->
    </dependency>
</dependencies>
3. 依赖导入后的操作

配置完成后,需刷新Maven工程使依赖生效:1. IDEA中右键项目→"Maven→Reload Project";2. 命令行中执行mvn dependency:resolve命令下载依赖。若依赖下载失败,可检查镜像配置、网络连接或依赖GAV信息是否正确。

xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
</dependencies>

依赖作用域(scope)

依赖作用域(scope)用于控制依赖在不同构建阶段的可见性和传递性,Maven共提供6种作用域,其中常用的有4种,核心作用是实现依赖的环境隔离,避免不必要的依赖被打包到最终产物中。完整作用域说明如下表:

作用域 test目录可见 main目录可见 打包包含 依赖传递性 适用场景及示例
compile(默认) 是 是 是 有(传递给依赖本项目的模块) 项目核心依赖,如Spring Core、Druid连接池等,全生命周期可见
provided 是 是 否 无(不传递给依赖本项目的模块) 由运行环境提供的依赖,如Servlet API(Tomcat提供)、JDK核心类库
runtime 是 否(编译不依赖,运行依赖) 是 有 运行时依赖的jar包,如MySQL驱动(编译用接口,运行用实现)、Jackson JSON解析
test 是 否 否 无 仅测试环境使用,如JUnit、Mockito测试框架、测试用工具类
system 是 是 是 无 本地系统依赖(非仓库依赖),需通过systemPath指定路径,不推荐使用(如本地自定义jar)
import 不适用 不适用 不适用 不适用 仅用于,导入其他pom的依赖管理配置(如Spring Boot BOM)

使用原则:优先使用compile、provided、runtime、test四种常用作用域,避免使用system作用域(依赖本地文件,移植性差);根据依赖的使用场景选择合适的作用域,如测试依赖必须用test,服务器提供的依赖用provided,减少最终产物的体积。

依赖优化

  • 版本提取与统一管理 :当项目中多个依赖来自同一框架(如Spring、MyBatis)时,其版本需保持一致,若手动修改每个依赖的版本易出错且维护成本高。通过节点声明版本变量,可实现版本的统一管理,修改时仅需修改变量值即可。
    `<properties> <druid.version>1.2.18</druid.version>
    <spring.version>6.1.2</spring.version>
    <mybatis.version>3.5.13</mybatis.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

com.alibaba druid {druid.version}\ org.springframework spring-context \{spring.version}</version> ` ``

Build配置

  • 打包命名:通过指定,默认格式为"artifactId-version.packaging"

  • 插件配置 :如配置maven-compiler-plugin指定编译版本
    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins> </build>

  • 资源打包控制 :指定非标准路径资源的打包规则
    <build> <resources> <resource> <directory>src/main/java</directory> <includes><include>**/*.*</include></includes> <excludes><exclude>**/*.java</exclude></excludes> </resource> <resource> <directory>src/main/resources</directory> <includes><include>**/*.*</include></includes> </resource> </resources> </build>

6. 继承与聚合

继承

  • 作用:父工程统一管理依赖版本,子工程导入依赖可省略版本

  • 父工程配置:packaging设为pom,删除src目录,通过声明依赖版本(不实际导入)

  • 子工程配置 :通过标签关联父工程
    <parent> <groupId>com.atguigu.java</groupId> <artifactId>08_maven_javase_parent</artifactId> &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;/parent&gt;

聚合

  • 作用:父工程批量构建子工程,自动优化构建顺序

  • 配置方式 :父工程通过标签包含子工程
    <modules> <module>son_01</module> <module>son_02</module> </modules>

继承与聚合的区别

维度 继承 聚合
核心目的 消除POM重复配置 方便批量构建
模块知晓度 父工程不知晓子工程 聚合模块知晓子模块

注意:实际项目中,一个模块常同时作为父模块和聚合模块。

二、pom.xml层级关系及核心节点说明

pom.xml(Project Object Model)是Maven项目的核心配置文件,采用XML格式,各节点层级分明,核心作用是管理依赖和构建配置。

1. 根节点与基本信息节点

  • :根节点,所有配置嵌套其中,需指定Maven POM Schema

  • :固定为4.0.0,Maven 2/3通用

  • GAVP核心节点 :项目唯一标识,必填

    :公司/组织标识,如com.atguigu.java(域名倒写)

  • :项目标识,建议与项目名一致

  • :项目版本,如1.0-SNAPSHOT(快照版)、1.0-RELEASE(正式版)

  • :打包类型,默认jar

/:可选,项目名称及描述,用于文档生成

基本示例

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>xyz.ibudai</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>maven demo</name>
    <description>This is maven demo.</description>
</project>

2. 依赖管理相关节点

  • :声明自定义属性,简化配置维护
    <properties> <spring.version>6.0.6</spring.version> <mysql.version>8.0.30</mysql.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>

  • :配置项目依赖,包含多个子节点,每个子节点包含:

    GAV节点:版本可通过${变量}引用

  • :依赖作用域(可选)

  • :排除传递依赖(可选)

:父工程专用,声明依赖版本,子工程继承后导入依赖可省略版本,仅声明不实际导入。

3. 构建配置节点()

用于配置项目构建相关参数,核心子节点:

  • :指定打包后的项目名称

  • :配置Maven插件,如编译插件
    <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins>

  • :配置资源文件打包规则,解决非标准路径资源不打包问题,可指定目录、包含/排除文件。

4. 继承与聚合节点

  • :子工程专用,配置继承的父工程GAV信息

  • :父工程专用,包含多个子节点,指定子工程目录名称,实现聚合构建

5. 其他辅助节点

  • :配置Maven仓库(如私服),用于获取特殊依赖
    <repositories> <repository> <id>wso2</id> <url>https://dist.wso2.org/maven2/&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt;

  • :配置部署信息(如私服地址),用于deploy命令

6. 核心层级结构示意图

xml 复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>

    <name>...</name>
    <properties>...</properties>

    <dependencyManagement>...</dependencyManagement>
    <dependencies>...</dependencies>

    <build>
        <finalName>...</finalName>
        <plugins>...</plugins>
        <resources>...</resources>
    </build>

    <parent>...</parent>
    <modules>...</modules>
</project>
相关推荐
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383006 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·6 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停7 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金9 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog10 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog10 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网11 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff11 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈