• maven学习笔记三(依赖特性,作用域)


    上一章中  我们看到了添加了个junit的依赖包.那么maven中想添加依赖的jar包我们只需要配置相应的dependency就行.例如:

    <dependency>
    				<groupId>org.eclipse.jetty</groupId>
    				<artifactId>jetty-server</artifactId>
    				<version>9.3.3.v20150827</version>
    			</dependency>

    实际开发中,我们更多的会用到项目与项目,模块与模块之间的依赖,比如:我这里有3个maven项目.

    1. user-core,2.user-log,3.user-service.

    user-service依赖于user-core和user-log

    那么,这个时候我们的依赖关系配置:

    <dependency>
    			<groupId>${project.groupId}</groupId>
    			<artifactId>user_core</artifactId>
    			<version>${project.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>${project.groupId}</groupId>
    			<artifactId>user_log</artifactId>
    			<version>${project.version}</version>
    		</dependency>
    ${project.version},${project.groupId}为maven中的常量表达式

    在配置依赖包的时候,有个scope属性.这个就是依赖传递的作用域,maven的几种作用域

    compile:

    默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。

    provided

    跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。

    runtime

    表示dependency不作用在编译时,但会作用在运行和测试时(如:mysql驱动)

    test

    表示dependency作用在测试时,不作用在运行时,同时没有传递性。

    system

    跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。 例如:

      

        <project>

         ...

          <dependencies>

            <dependency>

            <groupId>javax.sql</groupId>

            <artifactId>jdbc-stdext</artifactId>

            <version>2.0</version>

            <scope>system</scope>

            <systemPath>${java.home}/lib/rt.jar</systemPath>

            </dependency>

          </dependencies>

          ...

        </project>

    import(Maven 2.0.9 之后新增)

    它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置。

    多依赖特性:

    假如:现在有项目A依赖a.jar版本为1.0,B依赖a.jar版本为2.0,C依赖A,B项目,那么C用的哪一个依赖:

    A->a 1.0

    B->a 2.0

    C->A,B

    maven的依赖:如果依赖层次基本相同,先加入的优先级高于后加入的.即上面这个C的依赖是1.0的版本.当依赖级别不相同时,最直接的级别的优先级最高.

    限制依赖:

    有时候,我们的多依赖会造成包的冲突,这个时候我们需要排除某个依赖,我们可以这样配置:

    <dependency>
    			<groupId>${project.groupId}</groupId>
    			<artifactId>user_core</artifactId>
    			<version>${project.version}</version>
    			<exclusions>
    				<exclusion>
    					<artifactId>commons-logging</artifactId>
    					<groupId>commons-logging</groupId>
    				</exclusion>
    			</exclusions>
    		</dependency>
  • 相关阅读:
    博客搬家了,新域名dinphy.wang
    Win7 SP1 32位 旗舰版 IE8 快速稳定 纯净优化 无人值守 自动激活 20170518
    Win7 SP1 64位 旗舰版 IE8 快速稳定 纯净优化 无人值守 自动激活 20180604
    红米3 TWRP-3.2.1-0(android_7.1.2_r29) 刷8.1不提示错误 刷MIUI不再卡屏 修复无系统重启问题 更新于20180316
    SudaMod-81.0 / crDroidAndroid-8.1(android-8.1.0_r20)红米3 2018年5月3日更新
    windows 10专业版14393.447 64位纯净无广告版系统 基于官方稳定版1607制作 更新于20161112
    Deepin 15.5上安装 Node.js
    在github上搭建个人博客
    Deepin 系统下安装VMware并激活
    Windows 10 Version 1803 (Updated March 2018) MSDN 镜像下载
  • 原文地址:https://www.cnblogs.com/grimm/p/11343050.html
Copyright © 2020-2023  润新知