概述
Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具
构建过程主要环节
1、清理:删除上一次构建的结果,为下一次构建做好准备
2、编译:.java 源程序编译成 .class 字节码文件
3、测试:运行提前准备好的测试程序
4、报告:针对测试的结果生成一个全面的信息
5、打包
(1)Java工程:jar包
(2)Web工程:war包
6、安装:把一个 Maven 工程经过打包操作,生成的 jar 包或 war 包存入 Maven 仓库
7、部署
(1)jar 包:把 jar 包部署到 Nexus 私服服务器上
(2)war 包:借助相关 Maven 插件(如 cargo),将 war 包部署到 Tomcat 服务器上
依赖管理解决的具体问题
1、jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
2、jar 包之间的依赖:通过依赖的传递性自动完成
3、jar 包之间的冲突:通过对依赖的配置进行调整,让某些 jar 包不会被导入
生命周期
1、三个标准生命周期,每一个环节对应构建过程中的一个操作
2、作用:自动化构建过程,
3、Clean 生命周期:清理相关操作
生命周期阶段 | 描述 |
pre-clean | 执行一些需要在 clean 之前完成的工作 |
clean | 移除所有上一次构建生成的文件 |
post-clean | 执行一些需要在 clean 之后立刻完成的工作 |
4、Default (Build) 生命周期:用于构建应用
生命周期阶段 | 描述 |
validate(校验) | 校验项目是否正确并且所有必要的信息可以完成项目的构建过程 |
initialize(初始化) | 初始化构建状态,比如设置属性值 |
generate-sources(生成源代码) | 生成包含在编译阶段中的任何源代码 |
process-sources(处理源代码) | 处理源代码,比如说,过滤任意值 |
generate-resources(生成资源文件) | 生成将会包含在项目包中的资源文件 |
process-resources (处理资源文件) | 复制和处理资源到目标目录,准备打包阶段 |
compile(编译) | 编译项目 main 目录下的源代码 |
process-classes(处理类文件) | 处理编译生成的文件,比如说对 Java class 文件做字节码改善优化 |
generate-test-sources(生成测试源代码) | 生成包含在编译阶段中的任何测试源代码 |
process-test-sources(处理测试源代码) | 处理测试源代码,比如说,过滤任意值 |
generate-test-resources(生成测试资源文件) | 为测试创建资源文件 |
process-test-resources(处理测试资源文件) | 复制和处理测试资源到目标目录 |
test-compile(编译测试源码) | 编译测试源代码到测试目标目录 |
process-test-classes(处理测试类文件) | 处理测试源码编译生成的文件 |
test(测试) | 使用合适的单元测试框架运行测试(Juint 是其中之一),测试代码不会被打包 / 部署 |
prepare-package(准备打包) | 在实际打包之前,执行任何的必要的操作为打包做准备 |
package(打包) | 将编译后的代码打包成可分发格式的文件,比如 JAR、WAR、EAR 文件 |
pre-integration-test(集成测试前) | 在执行集成测试前进行必要的动作。比如说,搭建需要的环境 |
integration-test(集成测试) | 处理和部署项目到可以运行集成测试环境中 |
post-integration-test(集成测试后) | 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境 |
verify (验证) | 运行任意的检查来验证项目包有效且达到质量标准 |
install(安装) | 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖 |
deploy(部署) | 将最终的项目包复制到远程仓库中与其他开发者和项目共享 |
5、Site 生命周期:创建新的报告文档、部署站点等
生命周期阶段 | 描述 |
pre-site | 执行一些需要在生成站点文档之前完成的工作 |
site | 生成项目的站点文档 |
post-site | 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 |
site-deploy | 将生成的站点文档部署到特定的服务器上 |
插件、目标
1、插件
(1)Maven 核心程序仅仅负责宏观调度,不做具体工作
(2)Maven 插件完成具体工作
2、目标
(1)一个插件可以对应多个目标
(2)每一个目标都和生命周期中的某一个环节对应
仓库
1、本地仓库:在当前电脑上,为电脑上所有 Maven 工程服务
2、远程仓库:需要联网
(1)局域网:搭建的 Maven 私服,例如,使用 Nexus 技术
(2)中央仓库
(3)镜像仓库:内容和中央仓库保持一致,但是能够分担中央仓库的负载,同时让用户能够就近访问提高下载速度,例如:Nexus aliyun
3、建议:中央仓库、阿里云镜像不要混用,否则 jar 包来源相互冲突
4、搜索 Maven 依赖信息:https://mvnrepository.com/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战