Maven依赖管理

在Maven中,依赖是另一个存档-JAR,ZIP等等 - 当前项目需要编译,构建,测试和/或运行。依赖关系收集在pom.xml<dependencies>标记内的文件中。

运行构建或执行maven目标时,将解析这些依赖项,然后从本地存储库加载这些依赖项。如果它们不在那里,那么Maven将从远程存储库下载它们并将它们存储在本地存储库中。您也可以手动安装依赖项。

目录

依赖关系示例
外部依赖
关系
依赖关系树依赖关系排除
工件版本范围

Maven依赖示例

在进一步深入内部依赖关系管理之前,让我们有一个快速示例,其中包含我们将在本文中讨论的不同元素。

<dependencies>

 

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.12</version>

        <scope>test</scope>

    </dependency>

     

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-core</artifactId>

        <version>4.3.5.RELEASE</version>

    </dependency>

     

</dependencies>

如果pom.xml指向相同的多个工件groupId,则应使用属性以便对代码进行分解以便于维护。

<properties>

  <junit.version>4.12</junit.version>

  <spring.version>4.3.5.RELEASE</spring.version>

</properties>

 

    <dependencies>

     

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>${junit.version}</version>

            <scope>test</scope>

        </dependency>

         

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>${spring.version}</version>

        </dependency>

         

    </dependencies>

外部依赖

有时,您将不得不引用不在maven存储库(neiter本地,中央或远程存储库)中的jar文件。您可以通过将这些jar放在项目的lib文件夹中来使用这些jar 并配置外部依赖项,如下所示:

<dependency>

  <groupId>extDependency</groupId>

  <artifactId>extDependency</artifactId>

  <scope>system</scope>

  <version>1.0</version>

  <systemPath>${basedir}\war\WEB-INF\lib\extDependency.jar</systemPath>

</dependency>

  • groupIdartifactId都被设置为依赖的名称。
  • scope元件值被设定为system
  • systemPath元素指的是JAR文件的位置。

Maven依赖树

使用maven的dependency:tree命令,您可以传递查看项目中所有依赖项的列表。传递依赖意味着如果A依赖于B而B依赖于C,那么A取决于B和C.

当不同依赖项包含相同工件的不同版本时,传递性会带来非常严重的问题。它可能会导致运行时版本不匹配问题。在这种情况下,dependency:tree命令在处理JAR冲突时非常有用。

$ mvn依赖:树

它以给定的格式输出依赖信息:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ MavenExamples ---

[INFO] com.howtodoinjava.demo:MavenExamples:jar:0.0.1-SNAPSHOT

[INFO] +- junit:junit:jar:3.8.1:test

[INFO] \- org.springframework:spring-core:jar:4.3.5.RELEASE:compile

[INFO]    \- commons-logging:commons-logging:jar:1.2:compile

看看它如何告知有依赖的春天commons-logging。同样,您可以使用此命令获取完整的传递依赖项信息。

Maven依赖性排除

除了由传递依赖性引起的版本不匹配问题之外,项目工件和部署平台(例如Tomcat或其他服务器)的工件之间可能存在版本不匹配

为解决此类版本不匹配问题,maven提供了<exclusion>标记,以打破传递依赖性。

例如,当您在类路径中包含JUnit 4.12并包含DBUnit依赖项时,则需要删除JUnit 3.8.2依赖项。它可以用exclusion标签完成。

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>${junit.version}</version>

    <scope>test</scope>

</dependency>

<dependency>

    <groupId>org.dbunit</groupId>

    <artifactId>dbunit</artifactId>

    <version>${dbunit.version}</version>

    <scope>test</scope>

    <exclusions>

        <!--Exclude transitive dependency to JUnit-3.8.2 -->

        <exclusion>

            <artifactId>junit</artifactId>

            <groupId>junit</groupId>

         </exclusion>

    </exclusions>

</dependency>

工件版本范围

在包含依赖项时,您可以自由地为任何工件指定一系列版本。要提供版本范围,您可以使用以下符号:

  • 括号(和)暗示包括范围
  • 括号标志[和]暗示排除范围
  • 逗号分隔子集

版本范围示例

让我们举几个例子来更好地指出版本范围。

范围含义
1.2版本等于1.2或从1.2开始
(,1.2]任何小于1.2的版本。包含1.2版。x <= 1.2
(1.2)任何小于1.2的版本。版本1.2排除在外。x < 1.2
[1.2]仅限1.2版。x == 1.0
[1.2,)任何大于1.2的版本。包含1.2版。x >= 1.2
(1.2)任何大于1.2的版本。版本1.2排除在外。x > 1.2
(1.2,2.2)版本介于1.2和2.2之间。都被排除在外1.0 < x < 2.0
[1.2,2.2]版本介于1.2和2.2之间。都包括在内。1.2 <= x <= 2.2
(,1.2],[2.2,)版本低于1.2或大于2.2。都包括在内。x <= 1.2 or x >= 2.2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值