zoukankan      html  css  js  c++  java
  • 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>
    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) 声明优先

    若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。

  • 相关阅读:
    游戏开发挑战中心规划(16)
    游戏开发关卡设计(16)
    借鉴来的面试经验
    Scrapy:学习笔记(2)——Scrapy项目
    Scrapy:学习笔记(1)——XPath
    Django:学习笔记(8)——文件上传
    And Design:拓荒笔记——Form表单
    React:快速上手(7)——使用中间件实现异步操作
    JavaScript:学习笔记(9)——Promise对象
    JavaScript:学习笔记(8)——对象扩展运算符
  • 原文地址:https://www.cnblogs.com/myitnews/p/11478774.html
Copyright © 2011-2022 走看看