<?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>
	<!--1.组织标识(包名)-->
	<groupId>com.study</groupId>
	<!--构件名称-->
	<artifactId>service-study-parent</artifactId>
	<!--版本号 这里直接引用properties属性-->
	<version>${project.version}</version>
	<!--2.打包类型 包括jar、war、pom、maven-plugin-->
	<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,优点就是可以集中管理版本。-->
	<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>