天天看点

maven仓库设置,profile配置,镜像设置1. 超级pom文件2. Maven-全局范围setting.xml和用户范围setting.xml区别3. maven中profile元素的作用意义和用法4. maven下载资源时,仓库的优先级5. 镜像的配置及原理

目录

1. 超级pom文件

2. Maven-全局范围setting.xml和用户范围setting.xml区别

3. maven中profile元素的作用意义和用法

4. maven下载资源时,仓库的优先级

5. 镜像的配置及原理

我们知道只有当资源下载到本地仓库时,才会被maven使用。由于原始的本地仓库是空的, Maven必须至少知道一个远程仓库才能在执行命令时下载需要的构件。本地仓库默认地址为~/.m2/;远程仓库又可以简单的分为两类:中央仓库和私服。

我们的maven工程其实都由默认的中央仓库,这需要从超级pom.xml文件说起。

1. 超级pom文件

超级pom文件存在于maven核心程序中,路径:apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml。任何一个Maven项目都隐式地继承自超级POM, 因此超级POM的大量配置都会被所有的Maven项目继承, 这些配置也成为了Maven所提倡的约定。

如下所示,超级pom.xml文件中定义了默认的中央仓库,其ID为central,地址为 https://repo.maven.apache.org/maven2, 它关闭了snapshot版本构件下载的支持。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。

<!-- START SNIPPET: superpom -->
<project>
  <modelVersion>4.0.0</modelVersion>

  <!-- 定义了中央仓库以及插件仓库, 均为:https://repo.maven.apache.org/maven2 -->
  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

  .....
  .....

</project>
<!-- END SNIPPET: superpom -->
           

2. Maven-全局范围setting.xml和用户范围setting.xml区别

原文链接:https://blog.csdn.net/tjsahwj/article/details/84250896

补充:一个系统中存在多个用户的场景下,每个用户都有属于自己的home目录。在各自的home目录下管理自己的setting.xml配置,则是用户范围的配置。一个系统中会安装一个maven核心程序,在maven核心程序中也存在一个setting.xml配置,该配置则是针对整个系统所有用户的全局配置。

3. maven中profile元素的作用意义和用法

原文链接:https://blog.csdn.net/zy103118/article/details/79879879

提炼:

  • profile可以在setting.xml和pom.xml中配置。由于profile可以设置激活条件,所以可以利用这个特性来达到不同条件下使用不同的profile的目的。
  • profile中定义的 properties键值对可以在pom.xml中使用,若有两个profile同时定义了一个属性hello,且这两个profile都被激活。那么后定义的profile会覆盖前面定义的profile属性,即在pom中使用的hello属性的值是后定义profile中的。
  • 使用默认激活方式时<activeByDefault>true</activeByDefault>,只有在没有有指定其他profile激活时才会生效。

补充:

  • 激活的时候,若存在多个激活条件,多个条件是或的关系,即有一个条件满足就可以激活该profile。如下所示:
<activation>
	<jdk>1.8</jdk>
	<os>
		<name>1111</name>
	</os>
</activation>
           

4. maven下载资源时,仓库的优先级

  • 基本优先级顺序:本地仓库 > settings.xml的profile的仓库 > pom.xml的profile的仓库 >pom.xml的仓库 > 中央仓库
  • 如果仓库的id设置成“central”,则该仓库会覆盖maven默认的中央仓库配置(这种情况会影响基本优先级,例如在setting.xml中配置了一个仓库,且id为“central”,此时这个仓库覆盖了中央仓库,但是优先级变为小于pom.xml的profile的仓库, 大于pom.xml的仓库)。 
  • 如果发现该仓库有镜像设置,则用镜像的地址代替,例如现在进行到要在respository A仓库中查找某个依赖,但A仓库配置了mirror,则会转到从A的mirror中查找该依赖,不会再从A中查找。
  • 如果最终下载不到需要的资源,maven则会报错。

5. 镜像的配置及原理

原文地址:https://blog.csdn.net/b452608/article/details/49871237?utm_source=blogxgwz5

提炼:

  • maven的mirror是镜像,而不是“分库”,只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。所以当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询。
  • 当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。

继续阅读