zl程序教程

您现在的位置是:首页 >  Java

当前栏目

【学习笔记】mac安装maven与idea自带maven

2023-04-18 14:28:35 时间

一、安装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 是符合预期的本地仓库路径: