maven依赖管理(高级优化篇)

当你感觉很难的时候,其实你在走上坡路,当你觉得很容易的时候,就是在走下坡路。

1、传递依赖机制

何为传递依赖机制?
假设我们有一个Spring Framwork 的项目,我们如果不使用maven的话,需要手动去下载相关的依赖。而且Spring Framework 又会依赖于其他开源类库,因此我们需要下载很多jar包。而且大多数情况我们是根据报错信息,一个个去找,很麻烦对不对?很麻烦。
于是有了maven的依赖传递机制,这个时候我们使用Spring Framework的时候就不需要考虑它依赖什么了,也不用一个个手动去找相关的jar包了。maven就会去自动帮我们解析当前依赖需要那些间接依赖,自动帮我们下载。以传递性依赖的形式引入到当前的项目中。画个图:
在这里插入图片描述

2、传递性依赖和依赖范围

传递性依赖

传递性依赖上面已经讲过了,但是我们应该清楚它的术语,分为直接依赖和间接依赖。理解起来很简单,项目的直接声明的依赖就是直接依赖,项目声明依赖的使用到的依赖就是间接依赖。

传递性依赖范围

看清楚,是传递性依赖的范围。不仅仅是依赖的范围,但是与依赖的范围相同的是也是< scope > 来管理的,但是传递性依赖范围,是直接依赖和间接依赖共同决定的。
贴个表: (依赖范围影响传递性依赖)

取值compiletestprovidedruntime
compilecompileruntime
testtesttest
providedprovidedprovidedprovided
runtimeruntimeruntime

最左边一列表示第一直接依赖范围,最上面一行表示第二直接依赖范围。中间交叉单元格则表示传递性依赖范围。

3、依赖调解

在我们实际开发中,我们会定义很多依赖,依赖之间又有着很复杂的关系。所以maven为我们提供了依赖调解机制。主要表现为两个原则:第一原则(最短路径原则)、第二原则(第一声明者优先)。

第一原则(最短路径原则)

假设存在这样两种情况:
在这里插入图片描述在这里插入图片描述
因为存在第一原则(最短路径原则),我们的项目会导入第二种情况的X依赖。

第二原则(第一声明者优先)

第二原则是在第一原则的基础上的,在路径长度一致的情况下,最先声明的依赖会被解析使用。

4、可选依赖

通过< optional >标签可以让我们定义的依赖变成可选的依赖。
例如:

<dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.13</version>
       <optional>true</optional>
    </dependency>
    <!--这里是指举例看一下,实际orcal的驱动包不是开源的-->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
        <optional>true</optional>
 </dependency>

我们在项目汇总定义了两种JDBC连接驱动,这样别人在引用我们的项目的时候就可以根据实际情况导入自己需要的一种驱动。也简化的依赖的管理。当然我们在理想状态下,是不建议这样做的,在面向对象设计中,有个单一责任原则,意指一个类应该只有一项职责,而不是糅合太多的功能,这样的原则在规划Maven项目的时候也同样适用。

5、排除依赖

我们可以通过< exclusions > 、< exclusion >标签进行依赖的排除。适用于我们的依赖冲突的解决、或者不希望存在不稳定因素的依赖。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
     <optional>true</optional>
     <exclusions>
        <exclusion>
          <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java</artifactId>
          </exclusion>
       </exclusions>
    </dependency>

这里不需要声明版本号,因此传递过来依赖,版本号已经是固定的了。

6、归类依赖

归类依赖具体操作就是,将版本号提取出来,通过< properties >来声明依赖版本号(类似于定义一个变量),然后通过${…}来将变量值取出来。
举例:

<properties> 
<mysqlJdbc>8.0.13</mysqlJdbc> 
</properties>
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>${mysqlJdbc}</version>
</dependency>

这样管理有一个好处,比如我们在使用Spring-Framework各个模块的时候。可以将版本号提取出来,我们想要升级依赖的版本的时候,我们可以通过只改动一个地方,就可以进行版本升级了。

7、优化依赖

优化依赖讲三个命令。可以帮助我们来分析优化依赖。出去掉无用多余的依赖。

mvn dependency:list  查看已解析依赖的列表
mvn dependency:tree  查看已解析依赖的树
mvn dependency:analyze 查看分析依赖。

Used undeclared dependencies 指的是项目中使用到的,但是没有显示声明的依赖。
Unused declared dependencies,意指项目中未使用的,但是显示声明的依赖。理应删除此依赖。

小结

学以致用。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 阿里云最新的Maven仓库是指阿里云推出的一种用于存储和管理Maven项目的镜像仓库服务。作为一个可靠和高性能的镜像仓库,阿里云最新的Maven仓库提供了以下几个关键的特性: 1. 快速且可靠的下载速度:阿里云的全球分布式网络架构保证了Maven项目的快速访问和下载,无论是在国内还是国际网络环境下,用户都可以获得高速、稳定的服务。 2. 全面的镜像源支持:阿里云最新的Maven仓库覆盖了全球各个常用的开源镜像源,包括Maven Central、Spring、Gradle、Apache、JBoss等,并提供了丰富的开源生态系统。 3. 灵活的镜像同步机制:阿里云最新的Maven仓库采用了高效的同步机制,可以实时同步各大开源源,并通过智能缓存和优化策略,减少了冗余的下载和传输。这意味着用户可以更快地获取到最新的依赖包,提高开发效率。 4. 安全可靠的存储和管理:阿里云最新的Maven仓库提供了高可用和高可靠的存储和管理机制,保证了用户上传和下载的数据的安全性和完整性。此外,阿里云还提供了用户权限控制和访问日志等功能,帮助用户更好地管理和保护他们的项目信息。 总之,阿里云最新的Maven仓库为开发者提供了一个高性能、易用且安全可靠的镜像仓库服务,助力项目开发和管理。无论是个人开发者还是企业团队,都可以从中受益,提高开发效率和质量。 ### 回答2: 阿里云最新的Maven仓库是指阿里云推出的用于存储和分发Maven项目的镜像仓库,旨在提供高效、稳定的项目依赖下载服务。 阿里云的最新Maven仓库使用了分布式存储技术,具备了高可用性、高性能和高扩展性等优势。用户可以通过配置Maven的settings.xml文件来将阿里云的Maven仓库设置为镜像源,从而加速项目的构建和依赖的下载。 阿里云的Maven仓库拥有丰富的开源库支持,包括Spring、Hibernate、Apache等众多知名开源项目。用户可以通过在pom.xml文件中指定所需的依赖,然后通过Maven命令或者IDE插件将这些依赖从阿里云的镜像仓库中下载到本地项目中。 阿里云的Maven仓库还提供了多版本的支持,用户可以根据自己项目的需求选择所需的版本进行下载。此外,阿里云的镜像仓库还提供了丰富的功能支持,如快照版本发布、应用微服务等,方便开发者进行项目管理和发布。 总之,阿里云最新的Maven仓库是一个功能强大、稳定可靠的镜像仓库,可以为开发者提供快速、高效的项目依赖下载服务,使项目开发更加便捷。 ### 回答3: Aliyun最新的Maven镜像仓库是一个用于存储、共享和管理Maven构建的中央存储库。它提供了世界各地的云端访问,可以让开发者更快地下载所需的依赖项。 Aliyun最新的Maven镜像仓库具有以下特点: 1. 快速可靠:镜像仓库位于全球各地的数据中心,具备高速网络连接,能够提供稳定且快速的下载速度。 2. 可靠性和稳定性:Aliyun采用高可用架构来保证Maven仓库的稳定性和可靠性。无论是进行软件开发、构建还是运行,Aliyun提供了可靠的服务保障。 3. 多版本支持:Aliyun的Maven仓库中提供了各个版本的Maven依赖项,开发者可以根据项目需求选择合适的版本进行下载和使用。 4. 安全性:Aliyun Maven仓库采用了安全的认证和授权机制,只有经过验证的用户才能访问和下载依赖项,确保开发过程中的代码安全。 5. 功能强大:除了提供标准的Maven构建功能外,Aliyun Maven仓库还提供了其他高级功能,如仪表盘、分析报告和团队协作等,方便开发者进行团队协作和项目管理。 总之,Aliyun最新的Maven镜像仓库是一个功能强大、高可用、安全可靠的中央存储库,为开发者提供了优质的服务和世界级的下载体验。无论是个人开发者还是企业团队,都可以依赖Aliyun的Maven镜像仓库来进行Maven项目的构建和管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值