maven基础概念
参考文章:https://blog.csdn.net/wwwwwww31311/article/details/114323704
一 maven的安装配置
安装配置参考:https://daniel.blog.csdn.net/article/details/100545928
补充:这篇文章对maven的安装配置做了详细说明,唯一需要注意点的是,在配置maven的settings.xml文件,设置localRepository个人本地maven仓库路径时要和idea保持一致,避免后续出现麻烦
二 maven整合IDEA
整合idea参考:https://blog.csdn.net/qq_45821420/article/details/106446791
个人补充:
1 maven版本要合适至少不要太老,这点注意下即可
2 配置要小心,不要出错,其中注意
- User settings file选项:maven安装包中的核心设置(配置)文件
- Local repository选项:指定一个文件夹作为你本地存放jar包,这里要注意即maven的配置文件中也会需要指定Local repository即本地maven仓库,如下 那么最好的方式就是两者保持一致咯,同时IDEA还会默认在C盘用户文件夹下生成一个.m2文件夹,如下,这个目录下会生成临时的settings配置文件和repository数据仓库,这常见于打开别人的项目,比如你刚从Git上拉取了你公司的项目或者拉取了别人的项目,这时默认会在.m2文件夹下生成临时的配置和数据仓库,虽然这样也没问题,但还是推荐大家使用自己配置的路径
C:\${User}\.m2
3、idea的设置
File -> New Projects settings -> Settings for new fiie,这里面的设置项和Settings是完全一样的
区别是Settings是为当前项目设置,只对当前项目生效,New Projects settings则是对后续打开的项目进行设置
即后面打开的新项目默认配置就是按这,New Projects settings默认是和Settings一致的
三 Maven基础知识
参考文章:超级详细的Maven使用教程
补充:关于maven继承概念相关标签dependencyManagement感觉很少有文章能讲清楚,这里补充下,dependencyManagement并不是强制要求的,如果父项目不使用这个标签,那么dependencies标签中的依赖子项目什么都不用干会直接继承,dependencyManagement下管理dependencies,子项目就无法直接继承了,也是需要主动声明依赖,只是不用在指明版本号了
演示:
demo2项目只有一个简简单单的lombok依赖,父类实际上由于继承了父类的原因,项目内部具有了父类的全部依赖
但如果父类使用dependencyManagement,而demo2项目没有声明其它依赖,那它内部就只要一个
注意1:dependencyManagement中关联的版本必须声明版本号后子项目才被允许在不声明版本号的前提下引入依赖,否则会报错(参考下面错误三),所以,我们使用dependencyManagement标签做依赖管理时最好是搭配properties,更规范,且易于修改项目的依赖版本
总之:dependencyManagement中所管理的相关依赖必须要声明相关版本号
注意2:直接父maven项目中dependencyManagement里没有声明相关依赖的版本,那么子项目的可以声明自己的依赖版本号,如果在没有声明版本号的情况下没有报错,那就父项目所基础的更高一级的maven项目中对该依赖的版本号进线了管理,比如,我这里没有声明版本号,父项目dependencyManagement也没有对这个依赖版本号进行管理
但父项目的父项目就是springboot项目,我这里是2.5.2版本springboot,springboot中dependencyManagement对该依赖做了版本管理
验证,我们点进去这个spring-boot-starter-web,发现版本号是一致的,都是2.5.2,成功验证结论
四 使用技巧
1、规范性,名称全都要一致,举个反面教材,左侧Profiles是对项目maven配置即pom.xml文件做的配置读取
2、一个完整的项目肯定有很多不同的模块构成,不同的模块间最好使用同一版本的依赖,比如spring-boot-starter-parent这个依赖,都同一使用2.5版本,不要出现a模块使用2.5,b模块使用2.3这种情况
3、我们编写的工具类maven模块,同一个项目可以直接引入依赖
<dependency>
<groupId>com.wzh.utils</groupId>
<artifactId>common_utils</artifactId>
<version>1.0.0</version>
</dependency>
但如果别的同事也需要用这些个工具类呢?可以参考文章:工具类封装成jar包并在maven中添加依赖
二 实战技巧
1 刚打开的项目,尤其是从公司拉下来的项目,规模都很庞大,如果发现maven大量引入失败,先刷新maven,引入大量maven需要耐心等待,尤其是你电脑配置不佳或网速不佳的时候;
2 如果你公司在分布式架构基础写了个核心包,而且你通过pom引入依赖也成功了,但是会发现很多类找不到,如下
<dependency>
<groupId>com.sobot.core</groupId>
<artifactId>core-util</artifactId>
<version>1.0.0</version>
</dependency>
很多jar包明明依赖已经导入成功,甚至都可以在项目的External library找到了,如下
但为何就是不能引入成功呢?我们找到具体项目发现这个项目类路径下的确是没有依赖
其实这也是正常的,导入一个maven项目后,idea会把maven项目中的依赖对应的jar包导入到Externerl library外部库中,这里由于idea没有将jar包从Externerl library自动导入到classpath,项目所有报红的地方都要ALT+enter提示才可以导入。
3、我们发先有些项目中所引用的类sobot-core的jar包中没有
所幸我直接在git上拉取该项目是拉取下的sobot-core是完整的,但jar包和我拉下来的完整sobot-core版本号也是一样的,这就让人很无语了,这里我直接定位到sobot-core-util在本地所依赖的jar包,如下
我把从git下拉下来的sobot-core-util手动打成jar包然后取代之前的,这样就解决了*ar包缺斤少两的问题
五 常见报错
1、多模块项目mvn打包报错 ‘packaging’ with value ‘jar’ is invalid Aggregator projects require ‘pom’ as packaging
补充:如果你父项目没有声明packaging,那么就主动加上这个声明
<packaging>pom</packaging>
2 maven常见错误:Dependency is duplicated in file(s):
3 常见错误三:Cannot resolve xxxx(依赖名):unknown
六 Springboot依赖管理
参考文章:Springboot依赖管理