一、安装Maven
1.1 场景一:mac安装Maven
step1: 下载maven
到 maven官网下载压缩包,这里下载 apache-maven-3.8.6-bin.zip 压缩包:
step2: 解压安装
解压maven压缩包,将解压得到的maven文件夹 “apache-maven-3.8.6” 放到合适的路径下,我这里放到 /usr/local/目录下:
/usr/local/apache-maven-3.8.6
安装完成。
step3: 环境配置
打开终端,编辑配置文件:
vim ~/.bash_profile
在.bash_profile文件中添加Maven 路径:
#这里的路径就是step2中放置maven文件夹的路径
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=$PATH:$MAVEN_HOME/bin
添加完成后,在键盘上输入冒号然后输入wq,即保存并退出。
再运行以下命令重载配置文件,使其生效:
source ~/.bash_profile
step4: 测试安装结果
在命令行中输入以下命令,如果正常显示Maven版本及安装并配置正确:
mvn -v
step5:配置setting.xml文件
配置本地仓库:setting.xml 中默认本地仓库的路径是 ${user.home}/.m2/repository
可以自定义本地仓库的路径,比如在我们的maven文件夹下定义一个仓库:
<localRepository>/usr/local/apache-maven-3.8.6/my-maven-repository</localRepository>
配置国内镜像加速:在setting.xml文件的mirrors标签中配置镜像源,这里使用的是阿里的远程maven镜像,目前国内大多数都使用它
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
参考文档:mac安装maven及环境配置
1.2 场景二:让终端所用Maven和IDEA所用Maven版本一致
现象描述:
场景一中,我们自己从 maven官网 下载了maven3.8.6版本,解压安装后,terminal终端使用的mvn命令都是基于这个下载的maven版本的。
然而 IDEA 里一般默认使用其自带的maven版本:
如此一来,terminal终端使用的maven 和 IDEA自带的maven 版本存在不一致,setting.xml和LocalRepository的配置也有可能不一致。
终端和IDEA的maven版本不一致一般也没啥问题,如果想让终端所用Maven和IDEA所用Maven保持一致,看下怎么做。
方案一:让IDEA使用自定义的maven
我们可以将IDEA里默认maven路径修改为自己下载的maven路径: “/usr/local/apache-maven-3.8.6”,使用自定义的maven。
注意:更换“Maven home directory”处的路径时,直接在 Finder 中找不到 /Usr 路径下的文件夹,因为 /Usr 路径被隐藏了,可用快捷键 Cmd+Shift+G ,在弹出的目录中填写/usr相关目标路径即可。
当然,也可以更换idea中自定义的 setting.xml 文件和 local repository 。
方案二:让终端使用IDEA自带的Maven
有些情况下,希望终端使用IDEA自带的maven。则不用去官网下载maven了,直接找到IDEA里使用的自带的Maven的路径:
/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3
修改 ~/.bash_profile文件,将 MAVEN_HOME 的值替换为该路径(参考场景一 step3)
#这里的路径就是IDEA自带的maven路径;
#注意:IntelliJ IDEA.app 中间的空格要加个“\”转译,否则报找不到文件错误
export MAVEN_HOME=/Applications/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3
export PATH=$PATH:$MAVEN_HOME/bin
保存 ,source ~/.bash_profile 使其生效。mvn -v 检查一下:
可见,终端使用的maven也是 idea自带的maven,对应的setting.xml文件就是“/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf”路径下的setting.xml文件。
注意:mvn -v 时可能遇到一个“执行权限不够” 的问题:
/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn: Permission denied
解决方法:给mvn增加执行权限
# a:所有用户 +:增加权限 x:执行权限
chmod a+x /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn
如果无法识别IntelliJ IDEA.app这个文件夹,可以在空格前加个“\”试试。或者逐层 cd 到最后一层bin目录下,执行该命令:
chmod a+x mvn
二、相关问题记录
2.1 idea terminal控制台“mvn command not found”
问题的本质就是mac下没有配置maven的环境变量,按照场景一 或 场景二 给终端配置下mvn环境变量。也可参考 文档 。
2.2 idea中自定义maven版本,发现更新资源失败
可能是IDEA2019版与maven3.6.0以上版本不兼容导致,需要替换下maven版本。
2.3 修改mvn JRE所用的java版本
IDEA中,maven的runner所用的java版本可以自定义选择,我们可以选择自己安装的jdk:
终端中,mvn使用mac默认的java版本。 mac默认JAVA_HOME指向的是:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
这个并不是我们自己安装的jdk。 “mvn -v”时可以看到,mvn所用的java版本是来源于上述路径:
想要指定为自己安装的jdk,可以这样做:
- step1:查看当前机器安装的jdk有哪些版本
/usr/libexec/java_home -V
- step2: 编辑 ~/.bash_profile,修改JAVA_HOME指定为需要设置的版本。这里如下:
JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_151)
注意: 这里 $(/usr/libexec/java_home -v 1.8.0_151) 对应的路径是:
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
所以JAVA_HOME也可以设置为:
# JAVA_HOME 也可以这样写:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
source ~/.bash_profile 保存修改。使用 java -version 和 mvn -v 看下修改后的java 路径,使用的是自定义的java路径:
2.4 本地仓库配置问题
2.4.1 现象描述:
idea里配置的setting.xml文件和本地仓库如下,常用的jar包都已经下载在本地仓库${usr.name}/.m2/repository 中,使用idea的mvn命令时,无需重复下载,编译速度很快:
同一个project,使用命令行时(mvn clean) , 却在疯狂下载包,看起来并没有使用默认的 “${usr.name}/.m2/repository” 本地仓库:
2.4.2 探查
在project路径下,使用下面的 mvn help 命令查看对应的本地仓库:
mvn help:evaluate -Dexpression=settings.localRepository | grep -v '\[INFO\]'
发现所用的本地仓库路径是 “projectPath/~/.m2/repository” ,而非期望中的“${user.home}/.m2/repository ” 或 “~/.m2/repository ”。
换个路径再试试,到 user.home 路径再试试,使用 mvn help 命令查看对应的本地仓库:发现默认的 repository 也是 “当前路径/~/.m2/repository ”
这些localRepository路径看起来都是“当前path + mvn的本地仓库的相对路径”,给每个被查询的目录下都配置了这么个localrepository。
2.4.3 原因分析:
当前终端所用的mvn 是IDEA自带的maven:
在 “/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf”路径下的setting.xml文件中,已经配置了 localrepository 为“${user.home}/.m2/repository”:
这一块不会出问题。
再看下,IDEA maven中所用的setting文件,使用的是定义在“${user.home}/.m2/setting.xml”路径下的setting文件(没有使用“/Applications/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3/conf/setting.xml”路径下的):
在该setting文件中,localRepository路径使用的是相对路径:
<localRepository>~/.m2/repository</localRepository>
通过 “mvn help:effective-settings” 查看到当前生效的 setting信息,发现setting内容是将“${user.home}/.m2/setting.xml” 和 “/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/setting.xml” 两个setting文件合并起来的结果,合并后setting中 localRepository 取的是 “当前路径/~/.m2/repository”。
猜测是“${user.home}/.m2/setting.xml”中 localRepository 设置为相对路径惹的祸,改为绝对路径试试。
2.4.4 解决方案
在“${user.home}/.m2/setting.xml”中,将localRepository改为绝对路径
<localRepository>${user.home}/.m2/repository</localRepository>
改完后,再在project路径下,使用 mvn help 命令查看对应的本地仓库,是符合预期的本地仓库路径,不在与当前project有关系了:
再到 user.home 路径再试试,查看对应的本地仓库:发现默认的 repository 是符合预期的本地仓库路径:
版权归原作者 饕餮争锋 所有, 如有侵权,请联系我们删除。