Bootstrap

IDEA中Maven配置的生效逻辑与常用镜像代码

 

关键是怎么找到生效在当前项目的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里找。

 

f3ca69fbe07f4701ab13bd29f345a8d7.png

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。

fd29ca9e3a424f58bfc28d11f2636ed4.png

 

配置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>

 

 

;