关键是怎么找到生效在当前项目的Maven Setting配置文件,或怎么指定哪个Maven Setting文件为本项目的生效文件,它关系到我们配置好的想让它生效的Maven Setting文件可能根本就没有生效,这样的话再怎么配置都是没有用的。
IDEA 在选择生效在本项目的Maven Setting文件时,根据条件不同最多从四个地方依次去找这个文件,并且只要有一个地方存在对应的配置文件,就会应用这个配置文件的内容作为本项目的Maven配置,使其生效,并忽略其它地方的配置文件。如先从A找,A不存在则去B找,B存在,那就停止找C和D,则B中的配置文件就是本项目最终生效的配置文件。
举例说明条件不同时的寻找逻辑:
去不去A和B里找这是用户可以选择的,但C和D是默认的。比如你不选择去A和B里找,那IDEA就会先从C里找,找到了就应用C里的,找不到就去D里找。
Maven home path :当前Maven的安装目录。
Local repository :指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目录会自动读取出来, 可以不用手动指定)
具体而言:
如果你勾选了A,但是没有勾选B,那么IDEA找配置文件的顺序就是ACD,即使B里有对应的配置文件也会被忽略。
如果你勾选了B,但是没有勾选A,那么IDEA找配置文件的顺序就是BCD,即使A里有对应的配置文件也会被忽略。
如果如果你A和B都勾选了,那么IDEA找配置文件的顺序就是ABCD。
这四个地方的对应关系如下:
A对应于Use setting from .mvn/maven.config这个按钮,俗称项目级配置文件,这需要你在本项目的根目录下建一个.mvn文件夹,然后把配置命名为maven.config放在这个目录下。如果勾选它对应的Override 那么IDEA就会首先从这里找,但如果你没有建立这个文件夹或者配置文件名字对不上,那么即使勾选也没用。
B对应于User settings file这个按钮,俗称用户级配置文件,这个配置文件的路径可以随便设置,勾选之后,如果不从A找或者A找不到,就会从这个路径里找,找到就生效,找不到就再依次从C和D里找。如果不勾选就跳过B,即使B里有对应的配置文件也会被忽略。
C对应于~/.m2/settings.xml,这是个默认路径,~代表当前用户根目录。这个目录不是自动创建的,如果不手动创建,是不存在的。
D对应的是当前项目所使用的Maven程序所在的安装目录下conf目录里的settings.xml,这个目录和里面的settings.xml文件是安装就自带的。对于IDEA自带的Maven而言,路径是IDEA安装目录下\plugins\maven\lib\maven3\conf。
配置Maven镜像自不必说,就是在Setting文件里添加一段镜像代码,需要注意的地方可能就是得配置多个镜像,这样的话如果资源在第一个镜像找不到就去第二个镜像里面找,以此类推。因为单个镜像源可能不会涵盖项目的所有依赖,例如有些依赖阿里云没有但官方有,而指定依赖下载顺序则只需将镜像代码按顺序书写即可。
例:
<!-- 阿里云镜像 -->
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<!-- 腾讯云镜像 -->
<mirror>
<id>tencent</id>
<mirrorOf>central</mirrorOf>
<name>Tencent Mirror</name>
<url>https://mirrors.cloud.tencent.com/maven/</url>
</mirror>
<!-- 清华大学镜像 -->
<mirror>
<id>tuna</id>
<mirrorOf>central</mirrorOf>
<name>Tsinghua University Mirror</name>
<url>https://mirrors.tuna.tsinghua.edu.cn/maven/</url>
</mirror>
<!-- 官方镜像,作为最后的fallback -->
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>Central Mirror</name>
<url>https://repo.maven.apache.org/maven2</url>
</mirror>