2.Maven坐标和依赖

1.Maven坐标

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

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.3.RELEASE</version>
    <packaging>jar</packaging>
    <scope>...</scope>
    <optional>...</optional>
    <exclusions>...</exclusions>
</dependency>
  • 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已经提供了此依赖,故无须再引入。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

  • 4.runtime

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

3.传递性依赖

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

4.排除依赖

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

<dependency>
    <groupId>com.icegreen</groupId>
    <artifactId>greenmail</artifactId>
    <version>1.5.6</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
        </exclusion>
    </exclusions>
</dependency>

5.归类依赖

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

<properties>
        <spring.version>4.3.14.RELEASE</spring.version>
</properties>

    定义了上述的属性,则在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。==这种依赖意味着潜在的风险。== 因为升级依赖的时候,相关传递性依赖的版本发生了变化,但是不易察觉。==容易导致项目出现错误。==

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容