pom.xml文件说明(八)
- <?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中谁先被声明,就使用谁。
pom.xml文件说明(八)的更多相关文章
- Maven pom.xml文件详解
Maven pom.xml文件详解 一.简介 POM全称是Project Object Model,即项目对象模型. pom.xml是maven的项目描述文件,它类似与antx的project.xml ...
- 史上最全的maven的pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- (六)Maven之pom.xml文件简单说明
通过前面几部分知识,我们对maven已经有了初步的印象,就像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml.POM(Project Object Mo ...
- Maven项目pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- maven工程pom.xml文件解读
maven的核心是pom.xml,POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述如何构建,声明项目依赖.以Hello World项目为例,创建一个hel ...
- 史上最全的maven pom.xml文件教程详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 如何在maven项目的pom.xml文件中添加jar包
在使用maven进行项目开发时,我们需要在pom.xml文件中添加自己所需要的jar包.这就要求我们获取jar包的groupId和artifactId. 我们可以在一些maven仓库上搜索我们所需要的 ...
- maven 的 pom.xml 文件报错:ArtifactTransferException: Failure to transfer
因为maven下载依赖jar包时,特别慢,所以取消了下载过程,再次打开eclipse时,maven的pom.xml文件报错如下: ArtifactTransferException: Failure ...
- [maven] pom.xml 文件详解
参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...
- 个人对maven pom.xml文件的理解
如:一个项目可能需要引用另外两个项目的类.. 如 项目cswebbefore 需要引用cswebservice 和reports 这三个项目都有各自的pom.xml文件 cswebservice 项 ...
随机推荐
- leetcode347. 前 K 个高频元素
题目最终需要返回的是前 kk 个频率最大的元素,可以想到借助堆这种数据结构,对于 kk 频率之后的元素不用再去处理,进一步优化时间复杂度. 具体操作为: 借助 哈希表 来建立数字和其出现次数的映射,遍 ...
- Linux学习笔记-第17天 有点赶
第十章开始进度感觉有些快,该加把劲儿了
- POJ3104Drying(二分)
传送门 题目大意:n件衣服,每件有ai水分.每分钟可自然风干1个水分,或者放入机器中风干k个水分. 问最少花多长时间,衣服全干. 代码: #include<iostream> #inclu ...
- IPv6 邻居状态迁移
- QListWidget QListView QListWidgetItem样式设置
两种方式都可以,一个通用,一个具体 //具体 QListWidget#listWidget_param::Item:hover, QListWidget#listWidget_param::Item: ...
- 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)
1. 题目描述 /* 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径. 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子. 如果一条 ...
- PyCharm2019.3.1专业版激活
PyCharm2019.3.1专业版激活 Python的IDE非常多,但个人感觉PyCharm最好用.JetBrains 致力于为开发者打造最高效智能的开发工具,与2019.12.19带来新的版本20 ...
- Windows环境Tomcat开启APR并配置http/2.0访问
1.http/2.0需要开启https 参考:https://www.cnblogs.com/zhi-leaf/p/11978615.html 2.下载tcnative-1.dll文件 官网下载地址: ...
- LeetCode 26:删除排序数组中的重复项 Remove Duplicates from Sorted Array
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. Give ...
- 解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
最近开发的微信公众号项目中(项目采用Vue + Vux 构建,站点部署在IIS8.5上),遇到个非常奇葩的问题,发布站点内容后,通过微信打开网址发现是空白页面(后来验证是微信浏览器缓存了入口文件-in ...