<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /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中的其它地⽅可以直接引⽤使⽤⽅式如下:${ding} -->
<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>
<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的depen 即在⼦项⽬中需要声明groupId和artifactId,不需要声明versio
n-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<!--parent模块中,dependencyManagement中预定义太多的依赖,避免造成pom⽂件过长在需要使⽤到这些依赖的⼦model中,使⽤de                    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>
<build>
<finalName>study-server</finalName>
<plugins>
<plugin>
<groupId&ator</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&batis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<!--在构建⽣命周期中执⾏⼀组⽬标的配置。每个⽬标可能有不同的配置 -->
<executions>
<execution>
<!--执⾏⽬标的标识符 -->
<id>Generate MyBatis Artifacts</id>
<!--绑定了⽬标的构建⽣命周期阶段,如果省略,⽬标会被绑定到源数据⾥配置的默认阶段 -->
springframework jar包下载<phase>package</phase>
<!--配置的执⾏⽬标 -->
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<!--作为DOM对象的配置,配置项因插件⽽异 -->
<configuration>
<!--允许移动⽣成的⽂件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- ⾃动⽣成的配置 -->
<configurationFile>src/main/l</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
<!---发现依赖和扩展的远程仓库列表 -->
<repositories>
<!--发现依赖和扩展的远程仓库列表- -->
<repository>
<!--远程仓库唯⼀标识符。可以⽤来匹配在l⽂件⾥配置的远程仓库 -->
<id>spring-snapshots</id>
<!--远程仓库名称 -->
<name>Spring Snapshots</name>
<!--远程仓库URL,按protocol://hostname/path形式 -->
<url>repo.spring.io/snapshot</url>
<!--如何处理远程仓库⾥快照版本的下载 -->
<!--如何处理远程仓库⾥快照版本的下载 -->
<snapshots>
<!--可能有⼈会决定只为开发⽬的开启对快照版本下载的⽀持 -->
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
View Code
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) 声明优先
若引⽤路径长度相同时,在l中谁先被声明,就使⽤谁。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。