桂林北站到象鼻山多远,厦门电脑网站建设,设计工作室 网站,html代码格式化一、什么是pom.xml
pom.xml是Maven项目的核心配置文件#xff0c;它是 项目对象模型 - Project Object Model#xff08;POM#xff09;的缩写。POM定义了项目的所有属性#xff0c;包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml#xff0c;我们可以轻松地管…一、什么是pom.xml
pom.xml是Maven项目的核心配置文件它是 项目对象模型 - Project Object ModelPOM的缩写。POM定义了项目的所有属性包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml我们可以轻松地管理项目的构建和依赖关系让我们能够更专注于业务逻辑的开发。
二、POM文件说明
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.xsdmodelVersion4.0.0/modelVersiongroupIdcom.example/groupIdartifactIdmy-project/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingnameMy Project/nameurlhttp://maven.apache.org/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesparent!-- 父POM的声明 --/parentmodules!-- 子模块 --/modulesdistributionManagement!-- 部署管理 --/distributionManagementrepositories!-- 仓库配置 --/repositoriespluginRepositories!-- 插件仓库配置 --/pluginRepositoriesdependencies!-- 项目依赖 --/dependenciesbuildplugins!-- 构建过程中使用的插件 --/plugins/buildreporting!-- 报告配置 --/reporting/project
说明如下 modelVersion: 指定了POM模型版本。 groupId: 项目组ID通常是项目的包名。 artifactId: 项目构件ID通常是项目名。 version: 项目版本可以加上SNAPSHOT作为快照版本。 packaging: 打包方式如jar, war. name: 项目的展示名。 url: 项目的URL。 properties: 自定义属性。 dependencies: 项目依赖列表。 build: 构建配置包括插件配置等。 parent: 父POM用于继承。 modules: 子模块列表。 distributionManagement: 部署管理配置。 repositories: 仓库配置用于依赖的存储。 pluginRepositories: 插件仓库配置。 reporting: 报告配置用于站点生成。
三、补充说明
1、依赖冲突
如果依赖有冲突那实际采用的版本遵循以下原则。
最短路径优先声明优先
2、屏蔽依赖
如果项目A引入了一个依赖a其他项目依赖项目A时会自动引入依赖a如果我们不希望其他项目因为项目A引入依赖a时我们可以在项目A引入依赖a时进行配置optional选项令值为true即可。
比如Project2引入了Project1而Project1引入了log4j依赖。我们可以看到Project2也引入了log4j 这是我们在Project1的pom文件中设置令optionaltrue
dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/versionoptionaltrue/optional
/dependency刷新一下Maven就可以看到Proejct2不再引入log4j依赖了。 3、排除依赖
想要Project2不间接依赖log4j的话也可以主动在Project2的Pom文件中配置。使用exclusions。这样也可以达到目的。
dependencygroupIdcom.mavenlearning.project1/groupIdartifactIdProject1/artifactIdversion1.0.0/versionexclusionsexclusiongroupIdlog4j/groupIdartifactIdlog4j/artifactId/exclusion/exclusions
/dependency
4、依赖范围
依赖范围是指导入的依赖可以在项目中的哪些阶段或者位置使用使用scope来定义。比如引入一个依赖junit的scopetest那junit这个依赖包只能在test方法中使用。其中 打包范围是指packaging指令的范围。
scope主程序测试代码打包范例compile默认YYYlog4jtestYjunitprovidedYYservlet-apiruntimeYjdbc
5、聚合管理
我们可以建立一个新项目就叫Project这个项目是个空项目我把src下的文件都删了只留一个pom.xml文件。 建立这个项目的目的是为了聚合管理剩下的三个项目。在Project的pom.xml文件中将packaging的值设为pom。表示这个项目是个空的项目。
之后加上modules标签表示聚合管理这些项目以后对Project进行的maven操作都会一起作用到modules中定义的项目 现在我们对Project项目进行install操作日志如下。可以看到Project1,2,3都被一起install了。 6、dependencyManagement标签
dependencies是定义项目的依赖定义好之后项目会去加载对应的依赖。dependencyManagement中是存放依赖的定义。等到需要用到依赖的时候就在dependencies指定actifactId和groupId即可。
比如下面就没有指定spring-contexg的版本但是项目是知道要去使用5.3.15的。
dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactId/dependency
/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.15/version/dependency/dependencies
/dependencyManagement通常来说这个标签是用来统一管理依赖一般在父项目中定义依赖子项目就使用父项目中的依赖不会导致版本号不一致的情况。