在Mac OS X + Idea下搭建Maven项目 -- Maven的依赖管理

本文介绍了如何在Mac OS X环境下使用IntelliJ IDEA搭建Maven项目,重点讨论了Maven的依赖管理,包括依赖传递、依赖继承、依赖scope和依赖导入,展示了如何有效地管理和组织项目依赖,以实现版本控制和简化项目结构。
摘要由CSDN通过智能技术生成

上一篇博文讲到如何安装maven,这篇算是它的续篇,总结下maven是如何管理依赖的。

maven强大之处就是管理依赖。通过依赖传递,依赖继承,以及pom导入,可以轻松实现依赖的版本管理。通过依赖scope实现在不同的生命周期时段,加入依赖。

如下是一个最简单的为当前项目添加依赖的示例:
IntelliJ Idea > Preferences… > Build, Execution, Deployment > Build Tools > Maven
Importing一栏,将”Import Maven projects automatically” 勾选上。如果这一栏没有勾选的话,Idea会在右上角有个漂浮提示,也可以从这个提示那里点击开启。
接下来,往pom.xml里添加一条依赖,IDE会自动将此依赖添加到External Libraries里面。

     <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

#### 依赖传递 ####
比如我在pom.xml里加上了junit. 而junit要依赖于hamcrest-core。但是我不用再添加对于hamcrest-core的依赖,maven会自动做掉,于是我的External Libraries里面不仅有junit,还有hamcrest-core.

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

#### 依赖scope ####

  1. compile: 默认的scope,如果在dependency节点里没有写scope,那么它默认是compile
  2. provided: JDK/容器在运行时会产生/提供这个依赖
  3. runtime: 依赖仅在运行时需要,在编译时是不需要的
  4. test: 依赖仅用于测试,并不用于真正的appliation,比如添加junit依赖时,就可以为它加上scope = test,前提是application本身真的不需要用到junit
  5. system: 貌似已经弃用了…
  6. import: 导入别的pom的dependencyManagement部分

#### 依赖继承 ####
依赖继承有两个重要作用:

  1. 将子项目的公用依赖加入到父项目里,化简子项目的pom.xml
  2. 通过父项目的dependencyManagement里申明的版本号来管理所用依赖的版本

如下例子来自maven官方文档。Project A是父项目。Project B是A的子项目,所以B继承了A申明在dependencyManagement段落里的依赖,即:a-1.2,b-1.0,c-1.0,d-1.2。

但是由于B自己本身有定义对于a和c的依赖,所以对于依赖a, B会用自己本身定义的a-1.0。对于依赖c,B里面并未定义版本,所以maven会上溯至父亲A中找到对c的版本定义,所以是c-1.0。对于依赖b,它没有定义在B自己的pom里,所以继承自父亲A,b-1.0。对于依赖d,父亲A里有,自己的dependencyManagement也有,优先选用自己的,所以是c-1.0。

  <parent>
    <artifactId>A</artifactId>
    <groupId>maven</groupId>
    <version>1.0</version>
  </parent>

Project A的pom.xml:

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>maven</groupId>
 <artifactId>A</artifactId>
 <packaging>pom</packaging>
 <name>A</name>
 <version>1.0</version>
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>test</groupId>
       <artifactId>a</artifactId>
       <version>1.2</version>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>b</artifactId>
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>c</artifactId>
       <version>1.0</version>
       <scope>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值