POM文件的作用:
java的项目管理中,POM文件扮演着重要的角色.Maven 使用一个名为 POM(Project Object Model)的 XML 文件来描述项目的结构、依赖关系以及构建配置等信息.
POM 文件包含了项目的基本信息,如项目名称、版本号、开发者等。这些信息对于团队协作和项目管理至关重要。
POM 文件允许我们定义项目所依赖的外部库和组件。我们将讨论如何在 POM 文件中声明和管理依赖项,以及 Maven 如何解析和下载这些依赖项。
POM文件使用
java项目内部,需要依赖pom文件自动完成包的导入,这样开发可以自动进行包方法的调用,方便开发
pom文件的标签使用,POM文件采用xls格式,所以使用标签的方案就行定义格式,<a></a> 开始和结尾都存在对应的格式
POM的标签解析
parent: 父项目的坐标。如果项目中没有规定某个元素的值,那么父项目的对应值为该项目的默认值.
groupId: 公司或者组织的唯一ID,并且配置时生成的路径也由此生成
artifactId: 项目的全球唯一标识符,一个groupId下面可能多个项目,就是靠artifactId来区分
version: 本项目目前所处的编号
packaging: 打包类型
name: 项目名称 Maven产生的文档可用
url: 项目主页的Url,maven产生的文档用
配置项目的依赖配置
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
</dependency>
</dependencies>
可以配置依赖的居图jar包,之后进行调用:本项目具体依赖的项目,然后就可以是进行调用(集体表现为,ide可以自动显示类型和方法名)
具体的jar包说明可以通过:https://mvnrepository.com 进行搜索
POM文件的依赖关系的传递性
直接依赖: 在当前项目中通过依赖配置建立的依赖关系
间接依赖: 当前工程的pom文件依赖了A,A又依赖B,则本工程也依赖B,B为本工程的间接依赖
对依赖传递的可能问题的处理
依赖范围(Dependency scope)
compile: 默认值,表示依赖的范围:适用于所有阶段
provided: 表示编译、测试时需要,运行时不需要,不会被打包
runtime: 表示运行时提供依赖范围,如jdbc驱动,适用于运行和测试阶段
test: 表示测试依赖范围;测试时有效,用于编译和运行测试代码
system: 类似provided,需要显示提供包含依赖的jar,Maven不会再Repository中查找他
optional: 当项目本身被依赖时,标注依赖是否传递.用于连续依赖时使用
依赖调解(Dependency mediation)
Maven中用户只需要关心项目的直接依赖,而不必关系那些间接依赖
路径优先: 当依赖出现相同路径时: 层级越深,优先级越低,层级越浅,优先级越高
ps: 情况一: A->B->C->D
情况二: A->E->D
如果A引入的D存在两个不同的版本,那么因为不可以同时引入. 因为情况二的路径短,则项目引入情况二的版本D
声明优先: 当资源相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
ps: 情况一: A->B->D
情况二: A->C->D
如果A引入D存在两个不同版本,因为B的靠前,怎会引入B这条链上的D包
特殊优先:
当资源配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖(Option Dependenies)
在依赖中配置了optional为true/false是否向下传递,如果配置了true,则别人依赖了本项目,被配置的不会别人的项目依赖到.如果为false表示可以向下传递间接依赖
(别人配置pom之后,不会引入这个依赖包?)
排除依赖(Exckuded dependencies)
exclusions所包含的坐标,排除依赖包中所包含的依赖关系,不需要添加版本,直接类比排除,排除依赖可以设置 依赖中是否使用间接依赖.注意和可选依赖区分, 可以同样达到效果 依赖管理(Dependency management)
继承父项目的一些信息
定义项目一些属性,属性可以通过变量使用。
表示需要上传的包的版本好,这样可以方便其他项目调用。 但是版本好不能重复冲突. 但是使用 xxx-SNAPSHOT支持重复构建,因为这样的版本不是稳定版本。当上线生产的时候会取消SNAPSHOT进行重新发布,通常jenkins可以带有SNAPSHOT检测
用于多么快构建,当父模块进行编译的时候,子模块会一起进行编译
finalName> 指定编译之后jar包的名称
如果pom文件对应的模块下没有模块,那么生成的jar包会使用最外层version作为后缀添加到模块名称下面