又踩 Maven 的两个坑

用户头像
xiaoboey
关注
发布于: 2020 年 09 月 07 日
又踩Maven的两个坑

Maven用了这么多年,没想到还有债没还,真是活久见啊。。。



今天想在某个项目上启用mvnw,接连遇到几个问题,觉得还是有必要记录一下。

1、安装mvnw时报错:Unknown lifecycle phase

mvnw是Maven Wrapper的缩写,主要是保证让某个项目使用指定的maven版本,并且不影响其他的项目。Github地址:https://github.com/takari/maven-wrapper



从官方文档或者其他技术博客上,我查到的安装命令都是这样的:

mvn -N io.takari:maven:wrapper -Dmaven=3.5.4

但是,当我打开Windows Ternimal执行时,却收获到错误:Unknown lifecycle phase ".5.4". You must specify a valid lifecycle phase or a goal in the format



我想mvnw不至于这么差劲,开源项目基本都在用啊,想起mvn似乎有个毛病,PowerShell下不能执行的命令换CMD就OK,于是就开了个命令行窗口来执行,果然就行了。



技术债一: PowerShell下用单引号,可以把参数传给mvn,所以这样写可以执行:

mvn -N io.takari:maven:wrapper -D'maven=3.5.4'

单引号括住的字符串会被精确地传递到命令,其中包含的任何表达式都不会被计算,只是原样传递。




2、命令行里执行mvn时,Maven的配置(settings.xml)没生效?

mvnw安装好后,试试用mvnw代替mvn来执行一些操作:

mvnw clean install -DskipTests

没有报错,但是,怎么刷刷刷的提示信息中都是在下载jar包,并且不是从阿里云的加速上下载的,而是从maven的官方库在下载?



ctrl+c中断执行,然后加一个指定settings.xml的参数:

mvnw clean install -DskipTests --settings %MAVEN_HOME%\conf\settings.xml

OK了,没有再去下载依赖包,但是每次要加这么个参数,也太麻烦了!能不能全局生效呢?



答案是可以的,就是我欠的技术债二:将全局settings.xml复制到%HOMEPATH%\.m2目录下,这样在命令行(cmd)或者PowerShell中执行mvn命令时,就会跟IDE中的maven是一样的配置,避免重复下载jar包。



Maven的配置文件(settings.xml)默认是在安装目录%MAVEN_HOME%\conf下,这是一个全局配置。用户的个性化配置存放位置是:%HOMEPATH%\.m2\settings.xml,默认情况下不会自动创建。当两者都存在,它们的内容将被合并,并且用户的个性化配置占主导地位。



发布于: 2020 年 09 月 07 日 阅读数: 31
用户头像

xiaoboey

关注

IT老兵 2020.07.20 加入

资深Coder,爱好钓鱼逮鸟。

评论

发布
暂无评论
又踩Maven的两个坑