美丽说的网站建设,网站职能建设论文,有没有专门做营销的公司,wordpress百度不收录文章目录
1、Maven的下载安装
2、什么是pom#xff1f;
3、较完整的pom元素
4、默认生成Maven工程的pom内容
5、自定义的属性变量
6、依赖管理
6.1、整体依赖关系列表
6.2、依赖关系的传递性
6.3、依赖传递可能造成的问题
6.3.1、scope依赖范围
6.3.2、依赖调节
6.3.3…目录
1、Maven的下载安装
2、什么是pom
3、较完整的pom元素
4、默认生成Maven工程的pom内容
5、自定义的属性变量
6、依赖管理
6.1、整体依赖关系列表
6.2、依赖关系的传递性
6.3、依赖传递可能造成的问题
6.3.1、scope依赖范围
6.3.2、依赖调节
6.3.3、可选依赖6.4.2中详解
6.3.4、排除依赖6.4.1中详解
6.4、排除依赖和可选依赖
6.4.1、排除依赖
6.4.2、可选依赖
6.4.3、排除依赖和可选依赖举例
6.4.3、排除依赖 VS 可选依赖
7、Build插件配置
7.1、Build的两个部分配置
7.2、常用的Build结构
8、写在最后_超级POM
参考文章 1、Maven的下载安装 首选我们需要搭建一个Maven环境由于本篇侧重于分享解析pom.xml里面的元素对Maven的下载安装不做过多的阐述可以参考Maven的安装配置、IDEA中搭建Maven环境一文自行操作如有问题可以评论区留言
2、什么是pom POM全程Project Object Model又称项目对象模型。他是Maven工程的基本工作单元是一个XML可扩展标记语言文件包含了项目的基本信息用于描述项目如何构建声明项目依赖等等。执行任务或目标时Maven会在当前目录中查找 POM并读取从而获取所需的配置信息执行目标属于项目级别的配置文件。 总之pom最厉害的是提供一站式支持可用于管理源代码、配置文件、缺陷跟踪系统defect tracking system、组织和许可证licenses、项目所在的URL地址、开发者的信息和角色、项目依赖以及其他所有的和代码生命周期相关的方面。而在Maven中就只需要一个pom.xml文件可以说pom.xml就是Maven的核心
一个完整的pom.xml文件放在项目的根目录下
3、较完整的pom元素 pom的整体结构更详细pom可见 超级POM_POM文件总体配置说明.pdf project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersion!-- The Basics 基本部分 --groupId.../groupId artifactId.../artifactIdversion.../versionpackaging.../packagingdependencies.../dependenciesparent.../parentdependencyManagement.../dependencyManagementmodules.../modulesproperties.../properties!-- Build Settings 构建设置 --build.../buildreporting.../reporting!-- More Project Information 更多项目信息 --name.../namedescription.../descriptionurl.../urlinceptionYear.../inceptionYearlicenses.../licensesorganization.../organizationdevelopers.../developerscontributors.../contributors!-- Environment Settings 环境设置 --issueManagement.../issueManagementciManagement.../ciManagementmailingLists.../mailingListsscm.../scmprerequisites.../prerequisitesrepositories.../repositoriespluginRepositories.../pluginRepositoriesdistributionManagement.../distributionManagementprofiles.../profiles
/project
4、默认生成Maven工程的pom内容 其中groupIdartifactIdversion组成了项目的唯一坐标。 ?xml version1.0 encodingUTF-8?
!--project是pom.xml根元素它包含了pom.xml的一些约束信息声明了一些POM相关的命名空间以及xsd元素--
!-- xmlns 命名空间类似包名--
!-- xmlns:xsi xml遵循的标签规范--
!--xsi:schemaLocation 定义xmlschema的地址xml书写时需要遵循的语法--
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd!-- 指定了当前pom.xml版本目前固定为4.0.0版本。--modelVersion4.0.0/modelVersion!-- 坐标 --!-- 属于哪个组一般是项目所在组织或公司域名的倒序 --groupIdcom.sx.kak/groupId!-- 定义当前项目在组中的唯一ID一个groupId下面可能多个项目就是靠artifactId来区分的 --artifactIdnacospro/artifactId!-- 定义项目当前的版本 --version1.0-SNAPSHOT/version!-- 打包类型可取值pom , jar , maven-plugin , ejb , war , ear , rar , par等等 --packagingjar/packaging!-- 项目的名称可省略 默认artifactId可修改为用户友好的名称 --namenacospro/name!-- 仓库的地址可省略 --urlhttp://maven.apache.org/url!--定义的依赖清单有所依赖包都需要写在这个标签里面--dependencies!--具体的依赖 --dependency/dependency/dependencies/project5、自定义的属性变量 我们可以在POM的元素下自定义Maven属性 !-- 定义的属性变量在其他地方进行使用 --
properties!-- Java版本 --java.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncoding!-- 通过${hutool.version}来使用 --hutool.version5.0.6/hutool.version!-- 通过${pagehelper.version}来使用 --pagehelper.version1.3.0/pagehelper.version
/properties6、依赖管理 依赖关系描述了项目相关的所有依赖组成了项目构建过程中的一个个环节它们会自动从项目定义的仓库中下载一个项目可以设置多了依赖 可通过https://mvnrepository.com/寻找依赖获得相应的坐标具体操作可阅读Maven的安装配置、IDEA中搭建Maven环境一文6.1、整体依赖关系列表
!--定义的依赖清单有所依赖包都需要写在这个标签里面--
dependencies!--HuTool工具包 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion${hutool.version}/version/dependency!--pagehelper--dependency!--依赖项的组织名--groupIdcom.github.pagehelper/groupId!--依赖项的子项目名--artifactIdpagehelper-spring-boot-starter/artifactId!--依赖项的版本--version${pagehelper.version}/version!-- 依赖项的适用范围 --scopetest/scope!-- 可选依赖 对外隐藏当前所依赖的资源是不透明的如果别人依赖了本项目被配置的不会在别人的项目中依赖到--optionaltrue/optional!-- 排除依赖主动断开依赖的资源排除项目中的依赖冲突时使用不依赖该项目被排除的资源不需要指定版本--exclusionsexclusiongroupIdorg.mybatis/groupIdartifactIdmybatis/artifactId/exclusionexclusiongroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactId/exclusion/exclusions/dependency
/dependencies6.2、依赖关系的传递性
直接依赖在当前项目中通过依赖配置建立的依赖关系
间接依赖当前工程pom配置了依赖AA又依赖B则本工程也依赖BB为本工程的间接依赖。 如下图A依赖于BB又依赖于C此时B是A的直接依赖C是A的间接依赖。 我们都知道在Maven中依赖是有传递性的不管Maven项目存在多少间接依赖POM中都只需要定义其直接依赖不必定义任何间接依赖Maven会动读取当前项目各个直接依赖的POM将那些必要的间接依赖以传递性依赖的形式引入到当前项目中能够帮助用户简化POM的配置。 上图A、B、C三者的依赖关系根据Maven的依赖传递机制我们只需要在项目A的 POM 中定义其直接依赖B在项目 B的POM中定义其直接依赖CMaven会解析A的直接依赖B的POM 将间接依赖C以传递性依赖的形式引入到项目A中。
6.3、依赖传递可能造成的问题 通过依赖传递关系可以使依赖关系树迅速增长到一个很大的量级但很有可能会出现依赖重复依赖冲突等情况Maven针对这些情况提供了如下功能进行处理
依赖范围Dependency scope依赖调解Dependency mediation可选依赖Optional dependencies排除依赖Excluded dependencies依赖管理Dependency management
6.3.1、scope依赖范围 我们可以在POM的依赖声明使用scope元素来控制依赖与三种classpath编译 classpath、测试 classpath、运行 classpath 之间的关系这就是依赖范围。 scope依赖项有6个常用的可选范围 compile默认值表示编译依赖范围适用于所有阶段编译、测试、运行会随着项目一起发布。表明该jar包一直全程存在/需要provided表示已提供依赖范围编译、测试时需要运行时不需要不会被打包。如servlet.jarruntime表示运行时提供依赖范围只在运行时使用如JDBC驱动适用运行和测试阶段test表示测试依赖范围测试时有效用于编译和运行测试代码。不会随项目发布system类似provided需要显式提供包含依赖的jarMaven不会在Repository中查找它不推荐optional当项目自身被依赖时标注依赖是否传递。用于连续依赖时使用依赖范围与三种classpath 的关系 6.3.2、依赖调节 Maven中用户只需要关心项目的直接依赖而不必关心这些直接依赖会引入哪些间接依赖。但当一个间接依赖存在多条引入路径时为了避免出现依赖重复的问题就会通过依赖调节来确定间接依赖的引入路径。
6.3.2.1、路径优先 当依赖中出现相同的资源时层级越深优先级越低层级越浅优先级越高 A存在以下的依赖关系
情况一A-B-C-D
情况二A-E-DD是A的间接依赖但两条引入情况上有两个不同的版本不可以同时引入否则造成重复依赖的问题。根据Maven依赖调节的第一个原则引入路径短者优先情况一的路径长度为 3情况二的路径长度为2因此间接依赖D将从A-E-D路径引入到A中。
6.3.2.2、声明优先 当资源在相同层级被依赖时配置顺序靠前的覆盖配置顺序靠后的 A存在以下依赖关系
情况一A-B-D
情况二A-C-Ddependencies... dependency...artifactIdB/artifactId .../dependency...dependency...artifactIdX/artifactId.../dependency...
/dependenciesD是A的间接依赖其两条引入路径的长度都是2此时路径优先已经无法解决需要使用先声明者优先由以上配置可以看出由于B的依赖声明比C靠前所以情况一的间接依赖将从A-B-D路径引入到A中。
优先使用第一条原则解决第一条原则无法解决再使用第二条原则解决
6.3.2.3、特殊优先
当资源配置了相同资源的不同版本后配置的覆盖先配置的不做举例
6.3.3、可选依赖6.4.2中详解
在依赖中配置optional为true/false 是否向下传递如果配置为true则别人依赖了本项目被配置的不会在别人的项目中依赖到。如果为false表示可以向下传递称为间接依赖
6.3.4、排除依赖6.4.1中详解
exclusions所包含坐标排除依赖包中所包含的依赖关系 不需要添加版本直接类别排除 排除依赖可以设置当前依赖中是否使用间接依赖。注意和可选依赖区分可以达到同样的效果。
6.4、排除依赖和可选依赖 Maven依赖具有传递性在不考虑依赖范围等因素的情况下Maven根据依赖传递机制会将间接依赖C引入到A中。但如果A希望将间接依赖C排除于是Maven提供了两种解决方式排除依赖和可选依赖。
6.4.1、排除依赖
排除依赖是控制当前项目是否使用其直接依赖传递下来的间接依赖 exclusions元素下可以包含若干个exclusion子元素用于排除若干个间接依赖 exclusion元素用来设置具体排除的间接依赖该元素包含两个子元素groupId 和 artifactId用来确定需要排除的间接依赖的坐标信息 exclusion元素中只需要设置groupId和artifactId 就可以确定需要排除的依赖无需指定版本 version。
6.4.2、可选依赖
可选依赖用来控制当前依赖是否向下传递成为间接依赖
optional 默认值为 false表示可以向下传递称为间接依赖若 optional 元素取值为 true则表示当前依赖不能向下传递成为间接依赖。
6.4.3、排除依赖和可选依赖举例
假设A依赖于BB依赖于XB又依赖于Y。B 实现了两个特性其中一个特性依赖于X另一个特性依赖于Y且两个特性是互斥的关系用户无法同时使用两个特性所以A需要排除X此时就可以在A中将间接依赖X排除。
6.4.3.1、排除依赖举例
排除依赖是通过在A中使用 exclusions 元素实现的该元素下可以包含若干个 exclusion 子元素用于排除若干个间接依赖示例代码如下。
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.sx.kak/groupIdartifactIdA/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdcom.sx.kak/groupIdartifactIdB/artifactIdversion1.0-SNAPSHOT/versionexclusions!-- 设置排除 --!-- 排除依赖必须基于直接依赖中的间接依赖设置为可以依赖为 false --!-- 设置当前依赖中是否使用间接依赖 --exclusion!--设置具体排除--groupIdcom.sx.kak/groupIdartifactIdX/artifactId/exclusion/exclusions/dependency/dependencies6.4.3.2、选依赖举例
在B的POM关于X的依赖声明中使用optional 元素将其设置成可选依赖示例配置如下。
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.sx.kak/groupIdartifactIdB/artifactIdpackagingjar/packagingversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdnet.biancheng.www/groupIdartifactIdX/artifactIdversion1.0-SNAPSHOT/version!--设置可选依赖true则表示当前依赖不能向下传递成为间接依赖 --optionaltrue/optional/dependency/dependencies
/project6.4.3、排除依赖 VS 可选依赖
排除依赖和可选依赖都能在项目中将间接依赖排除在外但两者实现机制却完全不一样。
排除依赖是控制当前项目是否使用其直接依赖传递下来的接间依赖可选依赖是控制当前项目的依赖是否向下传递可选依赖的优先级高于排除依赖若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置那么可选依赖的取值必须为false否则排除依赖无法生效。
7、Build插件配置
Build理解为构建项目需要的信息主要用于编译设置
7.1、Build的两个部分配置 在Maven的pom.xml文件中Build相关配置包含两个部分一个是build另一个是reporting。
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd...!-- 称为Project Build是project的直接子元素 --build.../buildprofilesprofile!-- 称为Profile Build即是profile的直接子元素 --build.../build/profile/profiles
/projectProfile Build包含了基本的build元素而Project Build还包含两个特殊的元素即各种Directory和extensions。
7.2、常用的Build结构
!-- 构建项目需要的信息 --
build!-- 使用的插件列表 --plugins!-- plugin元素包含描述插件所需要的信息 -- plugin!-- 插件在仓库里的group ID --groupIdorg.springframework.boot/groupId!-- 插件在仓库里的artifact ID -- artifactIdspring-boot-maven-plugin/artifactId/plugin/plugins!-- 这个元素描述了项目相关的所有资源路径列表例如和项目相关的属性文件这些资源被包含在最终的打包文件里。 -- resources!-- 这个元素描述了项目相关或测试相关的所有资源路径 -- resource!-- 描述存放资源的目录该路径相对POM路径 --directorysrc/main/java/directory!-- 包含的模式列表例如**/*.xml. -- includesinclude**/*.xml/include/includes!-- 是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性文件在filters元素里列出 -- filteringfalse/filtering/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.*/include/includesfilteringfalse/filtering/resource/resources
/build8、写在最后_超级POM 看到这里有没有觉得对pom的理解又上了一个层次经常使用POM文件却对他是一知半解有时候就那么用了却不知道这个标签到底是啥意思于是就有了去了解每一个标签的作用的想法虽说还可能有所欠缺但是确实让我对Maven有了更上一层的理解我觉得还是有很多没有整理到后期在继续学习整理吧 超级POM就是一个比较全的POM文件如果有遇到不懂的可以去文档里面搜索如果有想要超级POM的小伙伴可见 超级POM_POM文件总体配置说明.pdf或者评论区留下邮箱地址私发给你 参考文章
https://maven.apache.org/pom.html#What_is_the_POMhttps://blog.csdn.net/jk418756/article/details/87917776https://www.cnblogs.com/cy0628/p/15034450.html