文章目录
1. Maven工程类型
1.1 POM工程
POM工程是一个逻辑工程,用在父级工程或聚合工程中。用于做jar包的版本控制
1.2 JAR工程
将会打包成Jar包,用作jar包使用,即常见的本地工程,Java Project
使用java -jar jar包名称
运行
1.3 WAR工程
将会打包成war,发布在服务器上的工程
2. 在IDEA中创建Maven工程
新建Maven工程
填写基本信息
创建成功
3. Maven项目结构
-
src/main/java
这个目录下储存java源代码 -
src/main/resources
储存主要的资源文件。比如xml配置文件和properties文件 -
src/test/java
储存测试用的类,比如JUNIT的测试一般就放在这个目录下面
因为测试类本身实际是不属于项目的,所以放在任何一个包下都显得很尴尬,所以maven专门创建了一个测试包用于存放测试的类 -
src/test/resources
可以自己创建,储存测试环境用的资源文件,如果测试环境使用的和开发环境不同,可以单独指定,否则默认使用main/resources下的文件 -
pom.xml
是Maven的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等
4. POM模式-Maven工程关系
POM模式,把每个项目看做一个对象,之间的关系有依赖,继承,聚合
4.1 依赖
4.1.1 概念
依赖关系,即A工厂开发或者运行过程中需要B工程的支持,则代表A工程依赖B工程
需要在A项目的POM中添加B项目的而依赖,也就是导Jar包
B工程可以把自己打成jar包,放入远程仓库,A工程中就可以下载依赖到B工程
4.1.2 注入依赖
在POM文件的 dependencies标签中配置该项目所有的依赖向,可以有多个dependence元素,以声明多个依赖
每个依赖dependence标签都应该包含以下元素:groupId, artifactId, version : 依赖的基本坐标,这三个属性加起来就是jar包的唯一标识
案例:加入mybatis依赖
4.1.3 依赖的传递性(特性)
依赖分为
-
直接依赖
在本项目中声明的依赖
-
间接依赖
在依赖项目中,所声明的依赖
传递依赖
传递依赖是Maven2.0的新特性,如果你的项目依赖一个库,这个库有依赖了别的库。你不必手动引入这些库,Maven会把这些库也间接的引入进来。这就是传递依赖。是将间接依赖的jar包也引入当前项目中
案例:上述建了一个maven-Demo1依赖了Mybatis,现在新建一个maven-Demo2,直接依赖Maven-Demo1,查看结果
先把maven-Demo1打包到本地仓库
mvn install
创建maven-Demo2,导入maven-Demo1的依赖
4.1.4 依赖的两个原则
-
最短路径优先原则
对于间接依赖来说,如果间接依赖了同一个包的多个版本,就会产生依赖冲突,针对这一情况,Maven采用最短路径优先原则。也就是间接依赖步数少的优先。比如
A->B->C->D(2.0)
和A-E-D(1.0)
两个间接依赖,那么最终采用的是D(1.0)
因为步数少 -
最先声明原则
如果两个间接依赖的步数是相同的,那么第一原则不能解决所有冲突,比如
A-Y-D(2.0)
和A-E-D(1.0)
,在Maven2.0.8以及之前,是没有办法确定的,但是在Maven2.0.9开始,为了尽可能的避免构建的不确定性,Maven定义了第二原则,第一原则优先。在路径长度相同的前提下,在POM中的依赖顺序决定了谁被使用。按定义顺序决定
4.1.5 排除依赖
上面说的是靠Maven自动选择冲突依赖,但是很多时候,我们需要手动控制依赖版本,那么可以手动排除间接依赖的版本,留下自己用的版本
在Dependency标签中添加Exclusions中定义排除的依赖,可以排除多个,每个exclusion定义了一个依赖,其中包含groupId和artifactId,因为不排除不需要版本号
案例:排除maven-Demo1中的mybatis依赖
4.1.6 依赖范围
在dependency标签中的scope标签中声明该依赖的范围
-
compile
默认的范围,编译、测试和运行时有效
-
provided
编译和测试时有效,运行时无效
-
runtime
只有运行时有效
-
system
系统范围和provided类似,但是必须显示指定一个本地系统路径,
对于一些maven仓库下载不了的jar包,可以安装到本地仓库,或者放到项目中,通过system引入依赖
-
test
编译测试时有效
-
import
import只适用于pom文件中的
<dependencyManagement>
部分。表明指定的POM必须使用<dependencyManagement>
部分的依赖。<dependencyManagement> <dependencies> <!-- springboot 的依赖工程 pom类型 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
4.2 继承
如果A项目继承B项目,则代表A工程默认依赖B工程的所有资源,且可以适用B工程中定义的所有资源信息
被继承的工程(B工程)只能是POM工程
可以在父工程的<dependencyManagement>
进行依赖版本号管理
本质上是POM文件的继承
4.3 聚合
当我们开发的工程拥有2个以上的模块的时候,每个模块都是一个独立的功能集合。比如某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候,每个平台可以独立编译,测试,运行。这个时候,我们需要一个聚合工程
在创建聚合工程的时候,总的工程必须是POM类型的工程。各模块个任意类型
聚合的前提是继承
聚合时,所有的子项目需要声明管理父项目。父工程中也通过modules管理所有的模块
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68306.html