首页/新闻资讯/正文详情

Maven项目构建工具:从依赖管理到自动化构建

发布时间:2026/9/24 2:51:16 来源:云帆数科 栏目:资讯中心
Maven项目构建工具:从依赖管理到自动化构建
第一部分Maven概述1.1 为什么需要Maven⭐老师强调Maven是一个Java项目管理和构建工具核心解决两个问题定义项目结构和管理依赖关系。没有Maven的痛点问题说明工具不兼容Eclipse建的项目前端放WebContentIDEA建的项目前端放webapp源码目录命名也不同换工具打不开依赖手动下载引jar包得自己下载具体文件再塞进项目mysql驱动、文件上传、富文本编辑器等版本冲突多人协作用不同版本jar包如mysql驱动版本不一致就会冲突Maven的解决方案功能说明统一项目结构规范目录如src/main/java放Java文件src/main/resource放资源文件依赖管理只需一小段坐标代码就能引入jar包不用存实体文件版本统一自动处理版本冲突统一管理⭐老师强调Maven像图书馆索书号——不用搬书回家凭号系统就调出书。依赖管理本质是用声明式坐标替代手动文件操作。1.2 Maven的核心优势⭐老师强调Maven项目的核心优势在于工具无关性——只要确认是Maven项目任意工具都能打开对开发友好。标准构建流程编译 → 测试 → 打包 → 部署⭐老师强调打包必须打war包部署需依赖Tomcat手动放到其webapp目录运行。war包与Tomcat是硬性依赖关系。第二部分Maven安装与配置2.1 版本选择组件版本要求说明Maven3.6.3IDEA 2024与低版本如3.6.0不适配模板JDK1.8统一要求IDEA2024版开发环境⭐老师强调企业里多见老项目未升级先用3.6.3更稳妥熟练后搜下新版本差异就能平迁。2.2 安装步骤步骤1解压从官网下载安装包随便找目录解压类似Tomcat步骤2配置环境变量MAVEN_HOME Maven解压根目录含bin文件夹 PATH 添加 %MAVEN_HOME%\bin⭐老师强调MAVEN_HOME指向解压根目录PATH必须引其bin目录。易错点是漏配PATH或HOME错指。步骤3验证安装mvn -version出现版本信息即安装成功。2.3 配置本地仓库与镜像修改conf/settings.xml配置项位置作用localRepository约40多行设置本地仓库目录避免默认C盘选非中文目录mirrors约160多行添加阿里镜像提速!-- 本地仓库路径 -- localRepositoryE:/maven/localRepo/localRepository !-- 阿里镜像 -- mirror idalimaven/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror⭐老师强调不配置则默认下载到用户目录的.m2文件夹占C盘空间。配阿里镜像可大幅提速。2.4 IDEA中配置Maven路径All settings → Build工具 → Maven配置项说明Maven主路径指向Maven目录不含binSettings.xml勾选override指定改过的文件本地仓库自动读取settings.xml中的路径JDK用环境变量中JAVA_HOME对应的第三部分Maven项目结构3.1 标准目录结构项目名/ ├── pom.xml ← Maven项目标识 ├── src/ │ ├── main/ ← 开发环境 │ │ ├── java/ ← Java代码包名同groupId如com.qcby │ │ └── resource/ ← 非Java资源需自行补建 │ └── test/ ← 测试环境 │ ├── java/ ← 测试代码 │ └── resource/ ← 测试资源 └── target/ ← 输出结果编译后文件⭐老师强调看到项目里有pom.xml就说明是Maven项目。main和test是镜像分布开发写逻辑、测试写验证别把测试代码误放进main里。3.2 约定大于配置⭐老师强调Maven项目里resource和java目录本质都是文件夹你硬把Java文件放resource里也能存、不报错但项目只识别约定目录下的Java文件放错地方就扫描不到、无法编译使用。约定目录的作用让构建尽量自动化构建工具只需扫描固定位置不必全盘找文件⭐老师强调易错点是以为能存就能用其实得按约定来。这跟电脑文件系统权限无关是Maven构建机制的限制。3.3 创建Maven项目方式1用命令创建mvn archetype:generate -DgroupIdcom.example -DartifactId项目名方式2用IDEA创建选纯Maven项目不带模板项目名自己填JDK选1.8GroupId默认域名倒写建议改成自己的并与项目名统一⭐老师强调groupId一般是域名倒写如com.example版本信息相对随意。第四部分pom.xml配置4.1 项目坐标groupIdcom.qcby/groupId !-- 组id域名倒写 -- artifactIdfirst-maven-project/artifactId !-- 项目名 -- version1.0-SNAPSHOT/version !-- 版本号 --标签说明groupId组id域名倒写artifactId项目名/模块名version版本号SNAPSHOT为快照版⭐老师强调项目庞大时会拆为前台、后台、公共等模块各模块可由不同组开发。项目是总集模块是其细分单元。4.2 属性定义properties jdk.version1.8/jdk.version project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties⭐老师强调properties用来定义属性和变量可统一设置JDK版本、编码等。多个地方用同一版本时可在properties里统一设置。4.3 依赖引入dependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version scoperuntime/scope /dependency /dependencies⭐老师强调所有依赖都可在中央仓库搜索如mysql、mybatis、spring等复制坐标进dependencies就能引入资源不用自己下jar包。第五部分依赖范围scope5.1 各scope详解scope编译测试打包说明典型示例test✗✓✗编译时用不了java变class阶段不参与只在测试环境能用打包时也用不了junit单元测试包provided✓✓✗编译、测试环境都能用最终打包不会被打进包里servlet包Tomcat自带compile✓✓✓整个编译阶段有必要用默认值不写就是compile通用依赖runtime✗✓✓编译阶段不参与测试和打包阶段才会用到靠反射获取资源数据库驱动、反射相关类⭐老师强调providedTomcat自带servlet-api的jar包本地开发需引入供编译和测试使用但打包部署时不能把servlet打进包里否则会和Tomcat自带的包发生版本冲突。runtimeruntime与system范围行为类似编译不用但来源不同——runtime仍来自仓库system强制用本地文件。scope像门票权限——test这张票只准进测试这扇门编译和打包的门都进不去。5.2 依赖传递⭐老师强调传递依赖是指项目间依赖会层层传导。若B项目依赖了mysql-connector并打包进本地仓库A项目只引入B项目就能因B已依赖它而间接用到mysql。传递条件方式说明不设置依赖直接去掉optionalfalse默认false即可传递true表示不传递scope设特定值test/provided会禁止传递⭐老师强调scope像传递开关test/provided就是关依赖链到这就断了。因为这两个值在打包时不可用而依赖想传递到A项目必须先打包提交。第六部分Maven生命周期6.1 生命周期阶段命令作用clean删除target文件夹编译后生成的文件compile编译把.java变成.classtest测试跑单元测试并输出结果package打包生成jar包或war包install把包提交到本地仓库deploy提交到远程服务器平时不直接用⭐老师强调这些环节是构建流程的先后步骤——package依赖前序编译与测试install又依赖package产出。6.2 打包与依赖复用⭐老师强调项目可打成jar包或war包。war包用于部署如河北大学研究生项目需放tomcat上自动解析jar包通用引入。jar包本质就是一些Java文件打包后别的项目可通过坐标引入。项目自身资源复用靠先打包再用相同groupId等坐标供他人引入。⭐老师强调打包和提交到本地仓库是两个动作。未提交就不算进仓库管理。6.3 JUnit单元测试Test public void testMethod() { // 测试代码 }⭐老师强调正常调方法得手写main、创建对象再点方法名而把Test加在方法上工具会自动帮咱们完成建main、建对象、调方法的过程。易错点注解必须加在具体方法上不是类或包它替代的是手动的main与方法调用不是替代业务逻辑本身附录一Maven命令速查表命令作用mvn clean清理target目录mvn compile编译mvn test运行测试mvn package打包mvn install安装到本地仓库mvn deploy部署到远程仓库mvn -version查看版本

相关推荐

与C语言的相遇
与C语言的相遇

我是一名大一电子信息工程专业学生,现在刚开始入门编程,跟着鹏哥学习C语言。虽然我现在对C语言还在初步了解阶段,但接下我会沉下心,努力学习。学习目标:掌握C语言基础,锻炼好自己的逻辑思维,为以… · 2026/9/24 2:50:45

Autosar CANTP六大超时参数深度解析与实战调优
Autosar CANTP六大超时参数深度解析与实战调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 2:50:45

AFFiNE深度体验:开源知识管理平台的架构解析与自托管部署指南
AFFiNE深度体验:开源知识管理平台的架构解析与自托管部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 2:50:45

ESP32-S3-WROOM-1固件烧录全攻略:从.bin文件到Flash下载工具
ESP32-S3-WROOM-1固件烧录全攻略:从.bin文件到Flash下载工具

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 3:39:54

手搓一个年会抽奖页面
手搓一个年会抽奖页面

项目简介 纯静态页面,无需部署后端接口服务,数据持久化依赖浏览器存储。 下载项目执行构建将打包到 ./dist 目录,可自行挂载至相应服务器上浏览使用。 注意:对于设置比较严格的图片服务器,可能出现图片跨域无法展示… · 2026/9/24 3:39:53

GaN图腾柱PFC过零点处理:三种无锁相环方案实测对比
GaN图腾柱PFC过零点处理:三种无锁相环方案实测对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 3:39:47

DC-DC电源纹波与噪声测量:示波器接地方式决定测试结果可信度
DC-DC电源纹波与噪声测量:示波器接地方式决定测试结果可信度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 3:39:41

从ARK趋势报告到本地AI推理:低成本技术验证实战指南
从ARK趋势报告到本地AI推理:低成本技术验证实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 3:39:35

Relay 17 Suspense 兼容性指南:Relay Hooks 为何基于 Suspense,而 Suspense for Data Fetching 为何尚未就绪
Relay 17 Suspense 兼容性指南:Relay Hooks 为何基于 Suspense,而 Suspense for Data Fetching 为何尚未就绪

前端开发工具 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay 点击查看 免费下载 Relay 在 React 17 上发布的 Relay Hooks 全面采用了 React Sus… · 2026/9/24 3:39:35

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码