• pom.xml的scope详解


    一、scope标签的值

    1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。
    2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。
    3、runtime:该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。
    4、provided:该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作。
    5、system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

    二、pom.xml案例

    
    <dependency>
    	<groupId>org.springframeworkgroupId>
    	<artifactId>spring-coreartifactId>
    	<version>${spring.version}version>
    
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    dependency>
    
    <dependency>
    	<groupId>commons-dbcpgroupId>
    	<artifactId>commons-dbcpartifactId>
    	<version>1.4version>
    	<scope>runtimescope>
    dependency>
    
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>servlet-apiartifactId>
        <version>3.0.1version>
        <scope>providedscope>
    dependency>
    
    
    <dependency>
         <groupId>com.alibabagroupId>
         <artifactId>alipay-sdk-javaartifactId>
         <version>java20171012102412version>
         <scope>systemscope>
       <systemPath>${project.basedir}/libs/alipay-sdk-java20180309170622.jarsystemPath>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    三、scope不同值参与阶段

    • compile,依赖参与项目的编译、运行、打包,都会参与;
    • test,仅参与测试时候的编译、运行,不会打包进去项目中;
    • runtime,参与项目的运行和打包,不会参与编译;
    • provider,参与编译、运行、不会打包到项目中,其他设施会提供;
    • system,参与编译、运行、打包时需要自定义;

    四、Maven的打包三种插件

    • maven-jar-plugin,默认的打包插件,用来打普通的project JAR包
    • maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包
    • maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等

    五、classifier使用

    1、classifier概述

    classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact)。它是可选的,它可以是任意的字符串,附加在版本号之后。

    2、使用场景

    • 场景一:区分基于不同JDK版本的jar包

    如果项目依赖,json-lib-2.2.2-jdk13.jar。则XML配置内容如下:
    假如这个目录下有以下两个jar包:

    <dependency>  
        <groupId>net.sf.json-libgroupId>   
        <artifactId>json-libartifactId>   
        <version>2.2.2version>  
        <classifier>jdk13classifier>    
    dependency>  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果项目依赖,json-lib-2.2.2-jdk15.jar。则XML配置内容如下:

    <dependency>  
        <groupId>net.sf.json-libgroupId>   
        <artifactId>json-libartifactId>   
        <version>2.2.2version>  
        <classifier>jdk15classifier>    
    dependency>  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 场景二:区分项目的不同组成部分,例如:源代码、javadoc、类文件等。
      如果需要json-lib-2.2.2-jdk15-javadoc.jar。则XML配置内容如下:
    <dependency>  
        <groupId>net.sf.json-libgroupId>   
        <artifactId>json-libartifactId>   
        <version>2.2.2version>  
        <classifier>jdk15-javadocclassifier>    
    dependency> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果需要json-lib-2.2.2-jdk15-sources.jar。则XML配置内容如下:

    <dependency>  
        <groupId>net.sf.json-libgroupId>   
        <artifactId>json-libartifactId>   
        <version>2.2.2version>  
        <classifier>jdk15-sourcesclassifier>    
    dependency> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六、optional标签使用

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
        <optional>trueoptional> 
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    比如父工程引入依赖,那么子工程不能继承引入spring-boot-devtools
    避免依赖冲突,如果是false遇不设置optional那么就会继承引入

  • 相关阅读:
    环境温湿度在线监测如何实现?有何应用场景?
    【数据结构篇】线性表1 --- 顺序表、链表 (万字详解!!)
    【无标题】
    通用NPU与针对自动驾驶系统NPU的差异点和挑战
    项目可交付成果的质量管理该怎么做?
    Flink运行时架构 完整使用 (第四章)
    神经网络基础视频教程下载,神经网络训练全过程
    Ubuntu 命令行安装 nodejs 并更新
    视频美颜SDK原理与实践:从算法到应用
    用 Python 为接口测试自动生成用例
  • 原文地址:https://blog.csdn.net/paulwang040/article/details/127664734