0609 maven
maven项目管理工具入门到精通
1. 课程安排
maven入门
概念
配置
maven进阶-配置详解
搭建私服(第三方仓库)
2. maven入门
2.1. 为什么产生maven管理工具
jar包: 依赖
使用maven管理软件的依赖(jar),避免团队反复的复制(jar)
maven管理工具具有依赖传递性,使用maven管理工具可以自动导入相关的依赖进行开发.
2.2. 什么是maven
Maven项目对象模型(POM),可以通过一小段描述信息[配置信息]来管理项目的构建,报告和文档的项目管理工具软件。
主要的功能:
方便项目的发布(项目是有生命周期管理的)-->项目从没有到有的一个过程.
在众多的依赖进行管理(项目中的依赖共享) --> 自已与别人的关系
总结:
一. 每个项目都有一个对象模型(Project Object Model):POM (一个maven项目必须有一个配置文件pom.xml文件)
二. 有一个标准的集合(在项目中进行一系列的配置)
三. 它是一个生命周期管理工具
清理/编译/测试/报告/打包/部署
四. 有一个管理系统,只需要配置一下即可使用,前提必须按照maven的规则办事.
使用maven的前提条件:需要联网,在maven的项目中,是没有任何依赖的,在使用到依赖时,会从互联网下载到本地进行使用.
3. maven的下载与安装
下载地址:http://maven.apache.org/download.cgi
在课件中已提供下载好的安装包:
安装maven时,需要在jdk的运环下运行,需要安装好jdk后,才能安装.
环境变量必须配置在jdk之后
查看配置是否生效:
4. maven的本地仓库
开发工具在运行项目时会用到一些依赖,这些依赖按照一定的规则存在本地计算机下的一个目录路径下,这个目录称为maven的本地仓库.
maven的本地仓库配置:
默认的目录路径: 本机用户的home目录下/.m2/repository目录.
可以更改目录路径:(本地仓库)
<localRepository>D:/path/to/local/repo</localRepository>
5. maven项目类型
普通的java项目: jar包
普通的web项目: war包
maven本身项目: pom包
5.1. 手动创建maven普通java项目(了解)
java项目的目录结构:
--src : 代码的目录
--src/main: 源代码目录(包括java代码和配置)
--src/main/java : 代表java的码代码
--src/test : 测试代码目录
--src/test/java : java的测试代码
--pom.xml -->每个模目都有一个核心的配置文件pom
5.2. 手动创建maven的web项目(了解)
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.hotdas.maven.quickstart -DartifactId=simple1 -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0.0-snapshot |
区分目录结构:
6. maven项目构建相关命令
(后面的命令运行,必须会运行前面的命令)
编译: mvn compile 将项目变成字节码文件
测试: mvn test 将项目中的test变成字节码文件
清除: mvn clean 将编译后的文件清除掉
打包: mvn package 将项目进行打包
运行项目: mvn run 运行当前项目
项目发布: mvn intall 将本地项目安装到仓库
项目部署: mvn deploy 将本地项目部署到生产环境
7. maven项目编辑工具的转换
7.1. 转化为eclipse项目
mvn eclipse:eclipse 将maven项目转化为eclipse项目
mvn eclipse:clean 将maven的eclipse配置清除掉
7.2. 转化为idea项目
mvn idea:idea将maven项目转化为idea项目
mvn idea:clean 将maven的idea配置清除掉
8. settings.xml配置文件
localRepository : 配置本地仓库目录
interactiveMode: 是否需要获取用户输入的模式
offline : 是否要离线模式下运行maven
pluginGroups: 插件组,在默认的情况下maven使用到的插件
proxies : 通过代理访问外面的仓库
servers : 配置服务器的配置 例如:安全配置待
mirrors: 镜像库 默认使用全球最大的中央仓库
profiles: 配置多种参数
profile: 配置单个参数
activeProfiles: 让多个配置生效
activeProfile: 让单个配置生效
9. idea集成maven环境
10. 使用idea创建项目
packaging:代表打包方式: pom,jar,war
10.1. 配置tomcat运行web项目
<?xml version="1.0" encoding="UTF-8"?> |
运行项目配置:
运行效果:
11. maven进阶-配置详解
11.1. maven仓库
在maven中,仓库分为: 本地仓库/远程仓库(最大的是中央仓库)
远程仓库: 自定义仓库(第三方仓库/私服) / 中央仓库
11.1.1. 依赖下载流程(没有配置私服)
11.1.2. 依赖下载流程(配置私服)
11.1.3. 第三方仓库
在默认的情况下,maven是从中央仓库下载依赖,当配置私服时,优先从私服下载依赖.
nexus: 第三方仓库 完全免费
artifactory : 第三方仓库 收费的
11.2. 坐标
坐标: 是区分全球所有项目的.
groupId : 组织 --用于区分公司全球项目的,一般是域名倒写
artifactId : 项目标识 -- 用于区公司内容的项目
version : 版本号 --标注项目使用版本的
获取坐标方式: 从中央仓库获取
11.3. 聚合模块与继承
模块: 就是工程拆分的部分
使用:
<modules>
<module>logs</module>
</modules>
父项目(继承):
<parent>
<artifactId>demo2</artifactId>
<groupId>com.hotdas</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
11.4. 依赖
dependencies : 作用用于引入工程的依赖(jar)
例如:
<dependencies> |
11.5. 依赖管理器
dependencyManagement :作用用于管理依赖的版本,使用到时可以手动导入.不会出现传递导入.
|
maven的两大核心: 依赖的管理和项目的构建.
11.6. 依赖的传递性
例如: A --> B 那么导入A依赖时,B依赖也会导入进来.
11.7. 依赖的调节原则
依赖调节原则:
- 路径近者优先原则
比如: A-->B-->C-->D (1.0版本)
H-->D-->E (2.0版本)
导入的是D版本为2.0版本
- 路径相同,第一声明优先的原则.
例如: A-->C-->D (1.0版本)
H-->F -->D(2.0版本)
则导入D (1.0版本)
11.8. 依赖排除
不想使用的依赖可以排除掉
|
11.9. 依赖的作用范围scope
compile: 全范围有效,在编译阶段使用到的依赖
test: 测试范围 ,在测试阶段使用的依赖
provided: 编译与测试范围,在编译与测试使用到的依赖.
runtime: 运行时用到的范围,项目运行时使用到的依赖
system: 系统范围,项目使用到系统内置的函数等
依赖范围 |
对编译有效 |
对测试有效 |
对运行有效 |
compile |
有 |
有 |
有 |
test |
没 |
有 |
没 |
provided |
有 |
有 |
没 |
runtime |
没 |
有 |
有 |
system |
有 |
有 |
没 |
12. maven管理依赖常见的问题
因为远程的依赖无法下载到本地仓库,如果maven第一次下载依赖失败,maven是不会再次进行下载了(maven会在下载的jar包中生成一个.lastupdated的文件,用于标识该依赖,不再下载)
注意: 如果需要再次下载,需要手动删除.lastupdated的文件.
给同学们提供一个脚本文件,可以多个文件夹清除.lastupdated的文件.
13. 私服(第三方仓库,内部仓库)
13.1. 安装私服
解压到一个目录下即可使用,为了跟自已系统中的应用程序端口不冲突,建议修改:
以管理员的身份安装私服到系统服务:
访问私服的服务器:
http://localhost:9999/nexus/#welcome
默认的登录用户与密码:
admin
admin123
13.2. maven使用第三方仓库
配置自已的私服:
13.3. 配置阿里的仓库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端