Maven 总结
2023-12-25 11:44:58 0 举报
AI智能生成
Maven 核心
作者其他创作
大纲/内容
能干什么
只需要在你的项目中以坐标的方式依赖一个jar包,Maven就会自动从中央仓库进行下载,并同时下载这个jar包所依赖的其他jar包——规范、完整、准确!
解决包的依赖问题
Maven就可以自动地将当前jar包所依赖的其他所有jar包全部导入进来,无需人工参与。
解决包的冲突关系
最短路径者优先和先声明者优先
maven的依赖管理机制
将项目拆分成不同的模块
实现项目的分布式部署
概念
Maven是一款自动化构建工具,专注于为Java平台的项目构建和依赖管理提供服务。
构建
构建就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、JSP页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
构建流程
清理:删除以前的编译结果,为重新编译做准备。
编译:将 Java 源程序编译为字节码文件
测试:针对项目中的关键点进行测试,确保项目在迭代开发中关键点的正确性。
报告:在每一次测试后,以标准的格式记录和展示测试结果。
打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署,Java工程对应Jar包,Web工程对应war包。
安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
部署:将打包的结果部署到远程方库或将war部署到服务上运行。
如何使用
安装 Maven 核心程序
1)检查JAVA_HOME环境变量。
2)解压Maven的核心程序。
3)配置环境变量。
(1)在系统变量中创建M2_HOME变量,并赋值。
在Path变量中,添加Maven环境变量。
4)查看Maven版本信息以验证安装是否正确
mvn -v
Maven联网问题
(1)Maven默认的本地仓库:~\.m2\repository目录。
(2)Maven的核心配置文件位置
(3)更改本地仓库位置
(4)配置阿里云镜像(下载速度快)
指定Maven编译版本
在settings.xml中的 标签中加入如下内容。
在IDEA中配置Maven
1)关闭所有项目后,回到如下页面,点击右下角的Configure ---> 点击setting
2)设置Maven的安装目录及本地仓库
3)配置Maven自动导入依赖的jar包
4)配置Maven的核心配置文件pom.xml
6)编写测试代码
7)使用Maven的方式运行Maven工程
第一个Maven程序
1)创建项目
2)创建一个空的项目
4)创建一个模块
5)右键→新建Module→Maven
6)点击Next,配置坐标
7)点击Next,为Module命名
main目录用于存放主程序。
java目录用于存放源代码文件。
resources目录用于存放配置文件和资源文件。
test目录用于存放测试程序。
核心概念
POM
Project Object Model项目对象模型
将Java工程的相关信息封装为对象,作为便于操作和管理的模型。Maven工程的核心配置。
可以说学习Maven就是学习pom.xml文件中的配置。
约定的目录结构
约定>配置>编码。
maven坐标
(1)groupId:公司或组织的域名倒序+当前项目名称
(2)artifactId:当前项目的模块名称
(3)version:当前模块的版本
如何通过坐标在仓库中查找jar包?
(1)将gav三个向量连接起来
(2)以连起来的字符串作为目录结构到仓库中查找
依赖管理
配置的基本形式是使用dependency标签指定目标jar包的坐标。
直接依赖和间接依赖
如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
依赖范围
1)compile(默认就是这个范围)
(1)main目录下的Java代码可以访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖。
(3)部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
2)test
(1)main目录下的Java代码不能访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖。
(3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
3)provided
(1)main目录下的Java代码可以访问这个范围的依赖
(2)test目录下的Java代码可以访问这个范围的依赖。
(3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
4)其他:runtime、import、system等。
依赖的传递性
当存在间接依赖的情况时,主工程能否访问间接依赖的jar包?这取决于间接依赖的jar包引入时的依赖范围——只有当依赖范围为compile时,主工程才能访问。
依赖的原则:解决jar包冲突
路径最短者优先
路径相同时先声明者优先
这里“声明”的先后顺序指的是dependency标签配置的先后顺序。
依赖的排除
(1)假设当前工程为MakeFriend,直接依赖OurFriends。
(2)OurFriends依赖于commons-logging的1.1.1版本,对于MakeFriend来说是间接依赖。
(3)当前工程MakeFriend直接依赖commons-logging的1.1.2。
(4)加入exclusions配置后,可以在依赖OurFriends时排除版本为1.1.1的commons-logging的间接依赖。
统一管理目标Jar包的版本
先配置依赖后设置版本
仓库
(1)本地仓库:为当前本机电脑上的所有Maven工程服务。
(2)远程仓库
①私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程提供服务。
②中央仓库:架设在Internet上,为全世界所有Maven工程服务。
③中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快地响应用户请求。
2)仓库中的文件
(1)Maven的插件
(2)我们自己开发的项目模块
(3)第三方框架或工具的JAR包
生命周期
Maven有三套相互独立的生命周期,分别是:
Clean Lifecycle在进行真正的构建之前进行一些清理工作。
Default Lifecycle构建的核心部分,包括编译、测试、打包、安装、部署等。
Site Lifecycle生成项目报告,站点,发布站点。
插件和目标
(1)Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
(2)每个插件都能实现多个功能,每个功能就是一个插件目标。
(3)Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
继承
由于非compile范围的依赖信息不能在“依赖链”中传递,所以有需要的工程只能单独配置。
使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。
创建父工程
(1)父工程的打包方式为pom
(2)父工程只需要保留pom.xml文件即可。
在子工程中引用父工程
(1)父工程坐标
继承
在父工程中管理依赖
(1)将Parent项目中的dependencies标签,用dependencyManagement标签括起来。
(2)在子项目中重新指定需要的依赖,删除范围和版本号。
聚合
在总的聚合工程中使用modules/module标签组合,指定模块工程的相对路径即可。
Maven可以根据各个模块的继承和依赖关系自动选择安装的顺序。
常见问题
jar未下载完成
不会回滚事务
不会提示下载失败
需要手动删除后再下载。
直接在仓库下搜索.lastupdated文件,然后ctrl+a全选后ctrl+d删除就能直接删掉所有没下载号的jar包。
jar包冲突问题
要么不要导入冲突的版本依赖
或者将冲突的版本排除掉
0 条评论
下一页