《Maven实战》--- 坐标和依赖

1. 坐标详解

坐标表明在仓库中组件的位置,根据坐标可以从仓库中将组件定位,并且拉下来

例子

<dependency>

    <groupId>org.sonatype.nexus</groupId>

    <artifactId>nexus-indexer</artifactId>

    <version>2.0.0</version>

    <packaging>jar</packaging>

</dependency>

标签名

含义

gruopIdgroupId一般有组织.项目,一般是域名反写,例如上面,org.sonatype表示Sonatype建立一个非盈利性组织,nexus表示Nexus一个实际项目,该gruopId和nexus.sonatype.org对应
artifactId这个一般是定义实际项目中一个maven项目,一个项目可能由多个maven组成,这个就是定义那个子模块的名称,但是应该用实际上面做前缀,方便寻找实际构件,上面例子就是用了nexus做前缀
version版本号
packaging打包的方式,最后是形成war包还是jar包,默认不写就是jar包
classifier该元素用来帮组定义构建输出一些附属构件,例如doc,sources包之类

 

上面五个元素groupId,artifactId,version必须的,packaging可选,classifier不可以直接定义

项目的构件的文件名是与坐标相对应的,一般的规则为artifactId-version [-classifier ] .packaging 例如上面例子构件就是nexus-indexer-2.0.0.jar,附属构件有nexus-indexer-2.0.0-javadoc.jar

 

  • 2. 依赖的配置

标签名

含义

groupId,artifactId,version见上述
type依赖的类型,对应packaging
scope依赖范围
optional标记依赖是否可选
exclusions用来排除传递性依赖

 

3. 依赖的范围

maven在编译项目主代码的时候,需要使用一套classpath,jar包文件以依赖的方式被引入到classpath中,其次maven,在编译和执行测试的时候会使用另一套classpath

依赖范围就是用来控制三种classpath的,编译classpath,测试classpath,运行classpath

  • compile:编译,测试,运行都有效
  • test:只对测试的classpath有效,其他不会引入
  • provided:对于编译,测试有效,在运行时无效,例子servlet-api,运行时候容器提供
  • runtime:对测试,运行有效,对编译无效,例子jdbc,编译之后只需要jdk的接口即可
  • system:与provide完全一致,必须通过systemPath显示指定范围
  • import  聚合与继承当中讲解
     

4. 传递性依赖和依赖范围

 第二依赖    
  compiletestprovidedruntime
直接依赖compilecompile--------runtime
 testtest--------test
 providedprovided----providedprovided
 runtimeruntime--------runtime

 

5. 依赖调解与可选依赖

A->B->C→X(1.0).       A->D->X(2.0)

路径最近者优先,上述依赖X(2.0)

在路径相同情况下,在pom中先声明者优先

 

可选依赖不会传递

A->B,B->X(可选),B→Y(可选),

A不会依赖X,Y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值