Maven系统学习
1、
1.1 何为构建?
编译、测试、运行、打包、部署等工作;
Maven就是用软件的办法让这一系列工作自动化,只需要一条简单的命令,所有繁琐的工作就会自动完成;
Maven最大的消除了构建的重复,抽象了生命周期,标准化了构建过程;
1.2 Maven不仅仅是构建工具、还是依赖管理工具、项目信息管理工具;
Maven为全世界的Java开发者提供了一个免费的中央仓库;
1.3 Maven的安装与配置
1.1 环境变量中新建变量:maven_home Maven的安装目录
1.2 环境变量配置path:
当我们在cmd中输入命令时,
window首先会在当前目录寻找可执行的文件或脚本;
如果没有找到,Windows接着遍历环境变量path中定义的路径;
由于将%maven_home%\bin添加到了path中,而%maven_home%实际是引用了前面定义的另一个变量,其值是Maven的安装目录;
Windows会在执行命令时搜索目录maven\bin 下的执行脚本;
1.3 安装目录分析
bin:
包含了mvn运行的脚本
boot:
只包含了一个文件***.jar,是一个类加载器框架,相对于默认的java类加载框架,提供了更丰富的语法,Maven使用该框架加载自己的类库;
conf:
其中的settings.xml文件可以全局的定制Maven的行为;
maven目录/conf/settings.xml:全局范围;
~/.m2/settings.xml:用户范围;
lib:
该目录包含了Maven运行时所有用到的java类库;
2、Maven基本使用
1.1 pom.xml
Maven项目的核心是pom.xml;
定义了项目的基本信息,用于描述项目如何构建、声明依赖。。。;
pom.xml中没有任何的java代码,体现了Maven的一大有点:让项目对象模型最大程度与实际代码相独立(解耦);
1.2 项目主代码(src/main/java)
会被打包到最终的构件(jar)中;
项目测试代码(src/test/java)
只在运行测试时用到,不会被打包;
mvn clean:
告诉Maven清理删除输出目录target/;
默认情况下,Maven构建的所有输出都在target、目录中;
mvn compile:
告诉maven编译src/main/java下的代码;
默认情况下,maven将主代码编译至target/classes目录中;
mvn package:
将项目主代码打包成一个jar或者别的包的文件,该文件位于target/目录下;
mvn install:
将打包好的项目安装到本地仓库后,其他的Maven项目才能使用打包的项目;
3、Maven的坐标
1.1 世界上的任何一个构件都可以使用Maven坐标来唯一标识;
1.2 groupId: Maven项目的名称
artifactId: maven项目模块
version: maven项目的版本
packaging: maven 项目的打包方式
1.3 <dependency>
<groupId..
<artifactId..
<version..
<type></type> 依赖的类型,默认为jar,对应于项目定义的packaging
<scope></scope> 依赖的范围:compile,test,provided,runtime,system,import
<optional></optional> 标记依赖是否可选
<exclusions></exclusions> 排除传递性依赖
</dependency>
4、Maven仓库
1.1 本地仓库、远程仓库(私服[局域网内的]、中央仓库[国外的])
1.2 镜像:
如果仓库A可以提供仓库B存储的所有内容,那么可以认为A是B的一个镜像;
5、Maven的聚合
1.1 把项目的各个模块聚合在一起构建
<modules></modules> 实现聚合的最核心的配置,一般位于项目目录的最顶层
6、Maven的继承
1.1 帮助抽取各模块相同的依赖和插件等配置
<parent> 父模块
<groupId..
<artifactId...
<version...
<relativePath></relativePath> 当项目构建时,Maven首先根据relativePath寻找父POM,如果找到父POM,就不需要去本地仓库找;
如果找不到,再去本地仓库查找;
<parent>
聚合和继承的关系:
聚合POM、继承关系的父POM的packaging都必须是POM
7、Maven的依赖管理
1.1 <dependencies></dependencies>
该元素说明 依赖会被继承
1.2 <dependencyManagement></dependencyManagement>
该元素 既能让子模块继承到父模块的依赖配置,又可保证子模块依赖使用的灵活性;
在dependencyManagement元素下声明的依赖不会引入实际的依赖,但能够约束dependencies元素下的依赖使用;
8、Maven的插件管理
1.1 <pluginManagement></pluginManagement> ???暂搁置
9、Maven的灵活构建
一个优秀的构建系统必须足够灵活,让项目在不同的环境下都能成功构建:
如:开发、测试、生产环境下数据库的不同配置;
maven为了支持构建的灵活性,内置了三大特性:
1、Maven属性:
1.1 内置属性:
${basedir} 项目根目录
${version} 项目版本
1.2 POM属性:
用户可以使用该类(project)属性引用pom文件中对应的元素的值;
1.3 自定义属性:
1.4 Settings属性:
与pom属性类似;
使用以settings.开头的属性 将会 引用 settings.xml文件中的元素的值;eg:${settings.localRepository}
1.5 java系统属性:
所有的java系统属性都可以使用Maven属性引用:
eg:${user.home}指向用户目录
1.6 环境变量的属性:
所有的环境变量都可以使用以env.开头的Maven属性引用:
eg:${env.JAVA_HOME}指向java的环境变量;
1.7 Maven属性只有在pom.xml中才会被解析,放到资源文件中是不会自动解析的,因此需要让Maven解析资源文件中的Maven属性:
资源文件的处理是由maven-resources-plugin做的事情
默认的行为:将项目主资源源文件复制到主代码编译输出的目录中,将测试资源文件复制到财务室代码编译输出目录中
【如何让Maven解析资源文件中的Maven属性???(开启资源过滤)】
使用命令行激活profile:mvn clean install -Pdev -P:在命令行激活一个profile
2、profile
1.1 profile的激活方式:
a, 命令行激活:多个profile之间以逗号分隔
mvn clean install -Pdev
b, settings.xml显式激活:
c, 系统属性激活:
d, 操作系统属性激活:
e, 文件存在与否激活:
f, 默认激活:
1.2 profile的种类:
pom.xml 只对当前项目有效
用户settings.xml 对该用户所有的Maven项目有效
全局settings.xml conf目录下的,对本机上所有的Maven项目均有效
3、Web资源过滤
在web项目中,资源文件位于src/main/resources/目录下;
web项目中还有一种静态资源,eg:css,js...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)