Maven坐标和依赖

Maven坐标和依赖

  • 坐标

    maven中通过groupId, artifactId, version三维坐标可以唯一标示当前项目

    • groupId
      表示机构中的一个实际项目,一般的格式为 com.机构名称.实际项目名称
      例如:com.rexluo.mvndev

    • artifactId
      一个实际项目中可能根据模块功能分为若干个maven项目,每个maven项目称为artifact(构件),命名时最好和实际项目保持一致: 实际项目名称-maven项目名称
      例如:mvndev-versionchecker-plugin

    • version
      表示当前项目的的具体版本

    maven坐标中还经常用到packaging,用来标示当前项目的打包类型,例如jar, war, ejb。如果不定义,默认值为jar


  • 依赖管理

    Maven的重要作用就是通过pom.xml来管理当前maven项目对其他artifact的依赖关系

    • 依赖的定义

      <dependencies>
        <dependency>
            <groudId>group_id</groupId>
            <artifactId>artifact_id</artifactId>
            <version>version</version>
        </dependency>
      </dependencies>
      
    • 依赖范围

      maven中编译,测试,运行都有不同的classpath,因为依赖的构件也有不同的有效范围

      • compile
        默认的依赖范围,对于编译,测试,运行都有效

      • test
        只对测试有效,例如junit,只是在UT和CT中需要依赖,源代码编译和运行时都不需要,不会被打包到项目的lib包中

      • provided
        编译和测试时有效,运行时无效,例如servlet-api,编译时需要,但是运行时,容器自带该jar,因此不需要打包到项目的lib包

      • runtime
        测试和运行时有效,例如JDBC驱动,编译时只需要JDK提供的JDBC接口,运行时才需要指定具体的JDBC接口实现
      • system
        和provided的依赖范围一致,但是需要显式的指明依赖的artifact的路径,这种依赖不是和maven仓库解析,而是和本机绑定,很少用到
      • import
        后续学习再补充
    • 依赖传递

      • 有如下依赖关系:A -> B -> X, 那么A就会传递性依赖于X,maven中我们不需要显式的管理A对于X的依赖,maven会帮我们管理

      • 传递依赖范围表

        compiletestprovidedruntime
        compilecompileruntime
        testtesttest
        providedprovidedprovidedprovided
        runtimeruntimeruntime
    • 依赖协调

      • 有如下两个传递依赖场景:

        1. A -> B -> C -> X(1.0.1) / A -> D -> X(1.0.2)

        2. A -> E -> Y(1.0.2) / A -> F -> Y(1.0.2)

      对于场景1, maven根据路径优先原则,A -> D -> X路径较短,因此选择X(1.0.2)
      对于场景2,由于两条路径相同,maven 2.0.9以前,会随机选取,之后的版本会按照申明优先原则,哪条路径先申明就选择哪条

    • 可选依赖

      • 场景如下:

        1. A -> B (compile) -> X (compile and optional)
        2. A -> B (compile) -> Y (compile and optional)

        由于X,Y是B的可选依赖,因此该依赖不会传递给A;
        实际开发中应该尽量避免使用可选依赖

    • 最佳实践

      • 排除依赖:剔除不需要的传递依赖

        <exclusions>
            <exclusion>
                <groupId></groupId>
                <artifactId></artifactId>
            </exclusion>
        </exclusions>
        
      • 归类依赖:多个依赖的artifact都有相同的版本,可以通过在pom.xml中加入以下定义来归类

        <properties>
         <springframework-version>2.5.6</springframework-version>
         <internal-version>master-snapshot</internal-version>
        </properties>
        
        <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-bean</artifactId>
             <version>${springframework-version}</version>
         </dependency>
        </dependencies>
        
      • 有用的命令:

        – mvn dependency:list : 列出当前项目所有的依赖artifact

        – mvn dependency:tree: 列出当前项目的依赖关系

        – mvn dependency:analyze: 分析当前的依赖关系

        used undeclared dependencies:
        使用了依赖,但是没有显式的声明,有可能是其他依赖传递进来,有潜在的问题,如果直接依赖对二级依赖的版本有变化,API可能相应变化,而导致编译,运行出错,且不易发现,应该尽量避免这种情况
        unused declared dependencies:
        这种情况要具体分析,可能当前项目没有直接依赖,但是其他框架对其有依赖,不能轻易删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最新全套Jar: FFMPEG3.4.1+JavaCV1.4.1+OpenCV3.4.1-含windows&linux;平台链接库。安卓和macos的链接库将另发。 请根据平台选择适当的链接库。 artoolkitplus-linux-armhf.jar artoolkitplus-linux-ppc64le.jar artoolkitplus-linux-x86.jar artoolkitplus-linux-x86_64.jar artoolkitplus-platform.jar artoolkitplus-windows-x86.jar artoolkitplus-windows-x86_64.jar artoolkitplus.jar ffmpeg-linux-armhf.jar ffmpeg-linux-ppc64le.jar ffmpeg-linux-x86.jar ffmpeg-linux-x86_64.jar ffmpeg-platform.jar ffmpeg-windows-x86.jar ffmpeg-windows-x86_64.jar ffmpeg.jar flandmark-linux-armhf.jar flandmark-linux-ppc64le.jar flandmark-linux-x86.jar flandmark-linux-x86_64.jar flandmark-platform.jar flandmark-windows-x86.jar flandmark-windows-x86_64.jar flandmark.jar flycapture-linux-armhf.jar flycapture-linux-x86.jar flycapture-linux-x86_64.jar flycapture-platform.jar flycapture-windows-x86.jar flycapture-windows-x86_64.jar flycapture.jar javacpp.jar javacv-platform.jar javacv.jar libdc1394-linux-armhf.jar libdc1394-linux-ppc64le.jar libdc1394-linux-x86.jar libdc1394-linux-x86_64.jar libdc1394-platform.jar libdc1394-windows-x86.jar libdc1394-windows-x86_64.jar libdc1394.jar libfreenect-linux-armhf.jar libfreenect-linux-ppc64le.jar libfreenect-linux-x86.jar libfreenect-linux-x86_64.jar libfreenect-platform.jar libfreenect-windows-x86.jar libfreenect-windows-x86_64.jar libfreenect.jar libfreenect2-linux-x86.jar libfreenect2-linux-x86_64.jar libfreenect2-platform.jar libfreenect2-windows-x86_64.jar libfreenect2.jar librealsense-linux-x86.jar librealsense-linux-x86_64.jar librealsense-platform.jar librealsense-windows-x86.jar librealsense-windows-x86_64.jar librealsense.jar opencv-ios-arm64.jar opencv-ios-x86_64.jar opencv-linux-armhf.jar opencv-linux-ppc64le.jar opencv-linux-x86.jar opencv-linux-x86_64.jar opencv-platform.jar opencv-windows-x86.jar opencv-windows-x86_64.jar opencv.jar videoinput-platform.jar videoinput-windows-x86.jar videoinput-windows-x86_64.jar videoinput.jar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值