首页 / XML / pom.xml文件说明(八)
pom.xml文件说明(八)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了pom.xml文件说明(八),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6953字,纯文字阅读大概需要10分钟。
内容图文
![pom.xml文件说明(八)](/upload/InfoBanner/zyjiaocheng/1116/2aa8907938cd422aa36bfd61956d74c1.jpg)
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
<? xml version="1.0" encoding="UTF-8" ?> < project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</modelVersion><!-- 公司名 --><groupId>com.study</groupId><!-- 项目名 --><artifactId>service-study-parent</artifactId><!--版本号 这里直接引用properties属性 --><version>${project.version}</version><!--打包类型 包括jar、war、pom --><packaging>pom</packaging><!--项目的描述名。一般产生项目文档时候才会使用 --><name>service-study-parent</name><!--项目描述 --><description>service-study project for Spring Boot</description><!--继承父pom --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.8.RELEASE</version><!--relativePath给出父项目相对于子项目的路径,这样在构件子项目时首先从该相对路径查找父项目,如果没有才会从本地库或进而远程库中查找父项目 --><relativePath>path</relativePath></parent><!--模块聚合 --><modules><!--module的值是一个以当前POM**为主目录的相对路径。 --><module>service-study-service</module><module>service-study-support</module></modules><!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} --><properties><project.version>1.5.5</project.version><java.version>1.8</java.version></properties><!--项目依赖 --><dependencies><dependency><groupId>com.sun</groupId><artifactId>tools</artifactId><version>1.8.0</version><!--依赖范围 --><scope>system</scope><!--系统依赖路径 --><systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath><!--设置指依赖是否可选,默认为false,即子项目默认都继承:为true,否则子项目必需显示的引入 --><optional>true</optional></dependency><!-- SpringBoot依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><!--没有指定verison,因为在父pom中使用了dependencyManagement来管理子类的版本 --><!---屏蔽依赖关系 --><exclusions><!--屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版, 现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 --><exclusion><groupId>org.skyscreamer</groupId><artifactId>jsonassert</artifactId></exclusion></exclusions></dependency></dependencies><!--提供了一种管理依赖版本号的方式,只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖 用于帮助管理chidren的dependencies,优点就是可以集中管理版本。 即在子项目中需要声明groupId和artifactId,不需要声明version--><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR4</version><!--parent模块中,dependencyManagement中预定义太多的依赖,避免造成pom文件过长 在需要使用到这些依赖的子model中,使用dependencyManagement管理依赖,并import scope依赖 注意:scope=import只能用在dependencyManagement里面,且仅用于type=pom的dependency --><type>pom</type><!----><scope>import</scope></dependency></dependencies></dependencyManagement><!--用类似于denpendencyManagement,只是denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin 与pom build里的plugins区别是,这里的plugin是列出来,然后让子pom来决定是否引用 --><!--主要定义插件的共同元素、扩展元素集合,类似于dependencyManagement, --><!--所有继承于此项目的子项目都能使用。该插件配置项直到被引用时才会被解析或绑定到生命周期。 --><!--给定插件的任何本地配置都会覆盖这里的配置 --><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.2</version><executions><execution><id>pre-process-classes</id><phase>compile</phase><goals><goal>jar</goal></goals><configuration><classifier>pre-process</classifier></configuration></execution></executions></plugin></plugins></pluginManagement><!--构建行为提供支持 --><build><finalName>study-server</finalName><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><!--与pom基础的dependencies的结构和功能都相同,只是plugin的dependencies用于plugin,而pom的denpendencies用于项目本身 --><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>3.4.0</version></dependency></dependencies><!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置 --><executions><execution><!--执行目标的标识符 --><id>Generate MyBatis Artifacts</id><!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 --><phase>package</phase><!--配置的执行目标 --><goals><goal>generate</goal></goals></execution></executions><!--作为DOM对象的配置,配置项因插件而异 --><configuration><!--允许移动生成的文件 --><verbose>true</verbose><!-- 是否覆盖 --><overwrite>true</overwrite><!-- 自动生成的配置 --><configurationFile>src/main/resources/mybatis-generator.xml</configurationFile></configuration></plugin></plugins></build><!---发现依赖和扩展的远程仓库列表 --><repositories><!--发现依赖和扩展的远程仓库列表- --><repository><!--远程仓库唯一标识符。可以用来匹配在settings.xml文件里配置的远程仓库 --><id>spring-snapshots</id><!--远程仓库名称 --><name>Spring Snapshots</name><!--远程仓库URL,按protocol://hostname/path形式 --><url>https://repo.spring.io/snapshot</url><!--如何处理远程仓库里快照版本的下载 --><snapshots><!--可能有人会决定只为开发目的开启对快照版本下载的支持 --><enabled>false</enabled></snapshots></repository></repositories></project>
1. 依赖范围
即在项目发布过程中,帮助决定哪些构件被包括进来
-
compile :默认范围,用于编译。编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包。
- provided:provide依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servlet api被Tomcat容器提供了。
-
runtime: runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包。
-
test: test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包。
-
system: system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用。
-
optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用。如:projectA 依赖projectB, projectB 依赖projectC时,当projectB的<optional>true</optional>时, projectA中如果没有显式的引入projectC, 则projectA不依赖projectC, 即projectA可以自己选择是否依赖projectC。默认<optional>的值为false, 及子项目必须依赖。
2. 依赖冲突
若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
(1) 短路优先
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar
在此时,Maven只会引用引用路径最短的Jar。
(2) 声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。
原文:https://www.cnblogs.com/myitnews/p/11478774.html
内容总结
以上是互联网集市为您收集整理的pom.xml文件说明(八)全部内容,希望文章能够帮你解决pom.xml文件说明(八)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。