Maven相关知识点

命令

基础命令

mvn help:effective-settings:查看当前maven配置的有效的conf/setting.xml文件的内容
mvn help:effective-pom:查看当前项目中有效的pom配置,包括依赖
mvn help:active-profiles:查看当前处于激活状态的profile
mvn -s filepath goal:使用某个路径下的配置文件,执行命令。例如:mvn -s ~/.m2/settings_local.xml clean deploy,使用这个配置文件执行清楚和部署的命令
mvn help:system:打印所有可用的环境变量和Java系统属性

常用命令

mvn dependency:tree

会显示项目引入jar包的依赖关系,有两个符号需要注意:
"+-":可以简单理解为,该jar包下面有依赖其他jar包
"\-":表示同一层依赖的最后一个节点,何为同一层依赖的最后一个节点?打个可能不太恰当的比喻:
他是他爸最小的儿子(如果把依赖树看成家族树,依赖树的根节点看作“老祖宗”的话)
另外,即使他有儿子了,他的标示符还是"\-"
注意:当使用该命令报错的时候,Some problems were encountered while processing the POMs,仔细看报错的详细内容,根据报错的提示进行排查修改

私服仓库相关

当把自己的jar包上传到私服仓库中时,通常会让选择上传的jar包类型,常见的的有两种libs-snapshots-local(快照包)、libs-releases-local(release包)

区别
ibs-snapshots-local:可以频繁上传同一版本的jar包,新上传的同版本的,会覆盖之前上传的。例如:上传了一个 test-1.0-SNAPSHOT,之后又改了jar中的内容又上传了一次,但是版本没变,还是test-1.0-SNAPSHOT,则别人引入test-1.0-SNAPSHOT的时候,则会引入最近一次上传的jar。
libs-releases-local:每一个版本的jar包只能上传一次,不能重复上传同一版本的jar包
总结:如果jar包内容频繁变更,但是又不想更换大的版本号,则可以选择 libs-snapshots-local。如果jar包内容基本不变,则可以选择 libs-releases-local

pom文件

标签

parent:一个maven项目(模块),只能有一个parent标签,就是只能单继承(类比java的单继承)
dependencyManagement:统一管理maven的依赖,这里面声名的dependency不会被下载,用到的时候会
被下载(单独在dependency中声名的才会被下载),这个只负责版本管理。如果在这个标签下的dependency中这样声名
<dependency>
	<groupId>父项目</groupId>
	<artifactId>父项目</artifactId>
	<version>Greenwich.RELEASE</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>
就可以简单理解为引入了父项目的配置文件(类比parent标签,但这个不会引入,只会声名,也是用到的时候引用);注意 <type>pom</type><scope>import</scope>,这两个标签;如果不写这俩,默认
dependencyManagement管理的是jar包,也就是用到的时候,引入的是dependencyManagement中声名的jar包;但是加上了,就可以理解为dependencyManagement管理的是父项目的pom配置,用的时候,直接
引用父项目中的某些jar包就可以(有选择性的引入,并不是把父项目的全部jar都引进来;不加的话,就是把父项目的所有jar都引进来);

jar包冲突

一般项目运行的时候出现:NoClassDefFoundError、NoSuchMethodError都是因为jar包的版本冲突引起的

编译相关

maven管理的项目,编译项目时会根据pom.xml文件来拉取jar包,如果引用的jar包跟编译的项目在同一个代码库中,会优先编译代码库中的原因,将其打包成jar;如果引用的jar包,本代码库不存在,则会去pom.xml文件配置的远程仓库中拉取jar包

常见问题

如果某一个项目(A)拉取pom依赖,总是失败,则可以用一个新的项目(B)拉取依赖,然后在A中重新reload project就行了(这种我猜测应该是A项目比较大,依赖较多,maven会产生bug)
注意:想要用这种操作则要保证A、B的maven配置是同一个,即idea中的maven home path跟user settings file完全相同

如果某一个项目的maven配置没问题,但是依赖导入有问题,可以先把idea中的项目代码删掉,重新从代码库中拉去,如果还有问题,可以重复这个步骤

如果某一个项目的依赖之前没问题,突然出现问题,发现依赖导入不见来,大概率是因为idea的问题,把idea的缓存清了,重启,重新导入依赖就可以了

如果maven中配置了不同环境的不同jar版本(maven的profiles),但是拉取依赖的时候,不能读取到配置,在idea中取消勾选,然后在重新勾选

依赖冲突解决思路
如果是由于自己更改pom文件导致的,则可以使用mvn dependency:tree命令 比较pom.xml更改前、后依赖的jar包有什么不同,依赖冲突一般就是由这些产生的

开发常用

idea右侧的maven工具栏,用的就是idea中maven home path配置的maven

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值