2.Maven坐标和依赖

1.Maven坐标

    Maven定义了一组规则,用于标识构件的唯一性。这些元素包括:groupId、artifactId、version、packaging、classifier。通过这些元素我们就可以找到对应的构件。


    org.springframework
    spring-core
    5.0.3.RELEASE
    jar
    ...
    ...
    ...

  • 1.groupId

定义当前Maven项目隶属于的实际项目,通常定义为公司域名的倒写加实际项目简写。比如阿里巴巴(com.alibab.dubbo)

  • 2.artifactId

该元素定义实际项目中的一个Maven项目模块,通常做法是使用实际项目名称作为artifactId的前缀。比如(dubbo-client)

  • 3.version

该元素定义Maven项目当前所处的版本。通常命名方式为:主版本号.次版本号.修订号。(主版本号:产品方向改变,或者大规模API不兼容。次版本号:保持相对兼容,增加主要功能特性。修订号:保持完全兼容性,修复BUG、新增次要功能)起始版本为1.0.0

  • 4.packaging

该元素定义Maven的打包方式。jar生成jar包,war生成war包,pom就是作为父子工程的父工程,仅仅引用pom。

  • 5.scope

依赖范围

  • 6.optional

标记依赖是否可选

  • 7.exclusions

用来排除传递依赖

2.依赖范围

    依赖范围是用来控制引入的jar与classpath的关系。(编译时的classpath、测试的classpath、运行classpath)

  • 1.compile

编译依赖范围。如果没有指定scope类型,默认为compile。此依赖范围的Maven范围对编译、测试、运行三种classpath都有效

  • 2.test

测试依赖范围。此依赖范围的Maven依赖,只对测试classpath有效。在编译主代码或者运行项目使用时无法使用此类Maven依赖。

  • 3.provided

已提供依赖。使用此依赖范围的Maven依赖,对于编译和测试classpath都有效。但是在运行时无效。eg:servlet-api。

因为通常java web程序都是运行在容器里面了,比如tomcat,而tomcat已经提供了此依赖,故无须再引入。


    javax.servlet
    javax.servlet-api
    4.0.0
    provided


  • 4.runtime

运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但是在编译主代码无效。比如JDBC驱动实现。因为主代码编译的只需要JDK提供的JDBC接口。只有在执行和测试需要具体的实现类

3.传递性依赖

    比如我们在引用Spring框架jar包的时候,在引入Spring Context jar包的时候,就无须引入spring-aop,或者spring-beans等等。因为Maven将这种传递依赖已经默认给我们加载好了。

4.排除依赖

    传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理。但是有有时候也会带来问题。比如:当前项目有依赖了第三方依赖,但是第三方依赖了另一个不稳定的版本。这样不稳定性就会传递给本项目。这时候就需要排除不稳定的版本依赖。


    com.icegreen
    greenmail
    1.5.6
    test
    
        
            com.sun.mail
            javax.mail
        
    

5.归类依赖

    如果项目依赖同一个项目的不同的模块,依赖的版本的都相同,则为了便于管理,使用properties元素定义Maven属性,比如spring项目。


        4.3.14.RELEASE

    定义了上述的属性,则在Maven运行的时候会将POM文件所有的${spring.version}替换掉。

6.优化依赖

    在软件开发过程中,会不断优化自己的代码。比如对Maven依赖,要及时去除多余的依赖。

查看当前项目的已解析的依赖

mvn dependency:list

以tree的形式展示已解析的依赖

mvn dependency:tree

查看未声明的依赖于声明但未使用的依赖

mvn dependency:analyze
[WARNING] Used undeclared dependencies found:
[WARNING]    org.springframework:spring-context:jar:4.3.14.RELEASE:compile
[WARNING]    org.springframework:spring-beans:jar:4.3.14.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING]    com.icegreen:greenmail:jar:1.5.6:test

    上面就是指项目中使用到的,但是没有显式申明的依赖,这里使用了未申明的spring-context。==这种依赖意味着潜在的风险。== 因为升级依赖的时候,相关传递性依赖的版本发生了变化,但是不易察觉。==容易导致项目出现错误。==

你可能感兴趣的:(2.Maven坐标和依赖)