maven import 重新下载_「Java三分钟」Maven的二三事

7060982d7af342fe439121ac1ff0b86d.png

关注我,每天三分钟,轻松掌握一个Java知识点。

很多人提到maven,都会认为它是一个jar包管理工具,在项目中统一整个工程使用到哪些jar包,都用什么版本,这种说法很对但不全面,maven还有很多功能大家没有用到或者用到了也不自知,今天就来给大家缕一缕manven得功能点。

一、maven到底能干那些事呢?

  1. 依赖管理

就是大家常说的jar包管理,在不使用maven的项目中,大家会把引用的jar包放到工程的lib,整个工作流程是这样的:开发中需要用到某个jar包,去对应的官网下载,放到本工程中,add到功能引用中,最后在代码中使用。

这样做存在几个问题,一是找jar包比较麻烦,java封装的功能包有很多,全世界大佬们重复造了很多轮子,我们在开发过程中还要满世界去找这些jar包很耗费精力时间。二是一个项目可能拆分成多个功能模块,每个模块都要重复的去沾这些jar包,极大的浪费了磁盘,而且包之间的版本管理会陷入混乱,不同项目间的交流也会变的困难。

maven是如何解决上述问题的呢?它构建了一个maven世界,囊括了大部分开源的jar包,它把这些jar包都叫做构件,maven通过坐标这一概念唯一标示一个构件,并建立一个中央仓库管理这些构件,现在我们想要某个jar包,只要告诉maven它的坐标即可,maven会自己给你送过来。

至于第二个问题,maven通过聚合与继承,实现了多项目间,通过maven进行关联,统一使用一套jar包,这样就解决了jar包重复和版本混乱的问题了。当然聚合和继承更多的是为了构建方便,也就是我们接下来要说的。

2.构建工具

这样一个场景大家可能很熟悉:早上来了,先从Git或者SVN上把代码更新下,然后编译调试,如果出错了还要找相关模块的开发同事去调试问题,更新提交,再开始开发自己的模块,然后写测试代码,跑单元测试,继续改。

然后就是打包发测试环境,测试人员测出bug,进bug管理工具,你继续更新代码,构建复现bug,修改跑单元测试,打包发布测试。这一天很多时间都不是在真正的开发代码上,而是花在编译、跑单元测试、打包和部署上,这就是构建。

maven能把大家从这些繁琐的工作中解救出来,只要在maven中配置好项目,只要一个mvn clean install,轻松搞定整个流程。maven依赖其强大的插件,从清理、编译、测试、打包和发布,全都自动搞定,而且这些流程都是可自定义配置的,灵活度极高。

二、maven的一些概念

1.manve坐标的概念。

maven坐标就是项目在maven中央仓库中的唯一标示。

坐标元素包括:

<artifactId>定义当期maven隶属的实际项目(可能会包含很多模块)artifactId>

<groupId>模块groupId>

<version>版本version>

<packaging>打包方式packaging>

<classifier>附属构建(不能直接定义)classifier>

我们在pom文件中使用这些标签,就能在manve世界中唯一标示我们的项目。

2.依赖的概念。

依赖可以简单理解为我们要依赖的jar包。

<dependencies>

<dependency>

<groupId>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-webartifactId>

<version>${springboot.version}version>

<type>type>

<scope>scope>

<optional>optional>

<exclusions>

<exclusion>

exclusion>

exclusions>

dependency>

前三个之前讲过了,就是坐标。这个也是最重要的,有了这个,manven才能在仓库中找到对应的依赖。

type就是依赖的类型,这个一般情况就不用声明了,默认是jar。

scope依赖的范围,值包括:compile、test、provided、runtime、system、import。这里不做赘述了,想了解的同学可以自行探索他们之间的区别。

optional是标记依赖是否可选。

exclusion是排除传递性依赖。这个日常中可能为用到,因为maven依赖具有传递性,这就导致依赖链中可能会存在我们想要自己声明的依赖却被maven隐式的引用进来了,这个时候我们就可以通过这个标签来剔除它,自己定义这个依赖。

说到依赖的传递性,这里有个点需要大家记忆,就是依赖调解。比如项目中有这样一个依赖关系:A->B->C->D、A->E->D都依赖D的情况下,maven会选择哪个呢?

答案是第二个,因为mavne有一个叫路径最近原则。那要是路径都一样呢?那就是选择最先声明的,这个原则可以帮助我们在项目中合理的调整依赖来解决问题。

以上就是今天的知识点,各位小伙伴get到吗?创作不易,望各位多多点赞收藏,有什么建议可以留言告诉我,我会积极采纳!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值