Java Maven settings.xml中私有仓库配置详解

 更新时间:2021年10月12日 11:51:38   投稿:BJT  
这篇文章主要介绍了详解Maven settings.xml配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Maven setting中私有仓库配置浅析

最近遇到过不少这样那样的问题,曾经做过maven的分享,但是发现当时部分内容还是太想当然了,下面经过尝试后简单总结下:

首先几个逻辑:

  • pom>启用的profile>maven原有配置
  • mirror配置mirrorOf和id匹配优先

简单maven配置

一般大家的配置(略去无关私有仓库配置)都是这样的

<mirrors>
  <mirror>
      <id>nexus</id>
      <name>mvn.xxx.com</name>
      <mirrorOf>central</mirrorOf>
      <url>http://mvn.xxx.com/nexus/content/groups/t_repo_group/</url>         
  </mirror>
</mirrors>
  <profile>
      <id>dev</id>
      <repositories>       
      <repository>
        <id>nexus</id>
        <url>http://mvn.xxx.com/nexus/content/groups/t_repo_group/</url>
        <releases><enabled>true</enabled></releases>
                  <snapshots><enabled>true</enabled></snapshots>
      </repository>
                  
          <repository>
              <id>alibaba</id>
              <url>http://code.alibabatech.com/mvn/releases/</url>
              <releases>
                  <enabled>true</enabled>
              </releases>
              <snapshots>
                  <enabled>false</enabled>
              </snapshots>
          </repository>
         
      </repositories>
      
      <pluginRepositories>
          <pluginRepository>
        <id>nexus</id>
        <url>http://mvn.xxx.com/nexus/content/groups/t_repo_group/</url>
        <releases><enabled>true</enabled></releases>
                  <snapshots><enabled>true</enabled></snapshots>
      </pluginRepository>
      </pluginRepositories>
  </profile>  
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>

mirrors

这个标签重要的属性包括id、mirrorOf。id用来唯一区分。mirrorOf用来关联repository。
url用来表示私服地址。

mirrorOf常见大家配置成*、central、repo啥的。这里刚才提到了是用来关联respository的,等提到下面<respository>标签的时候在解释。

profile

这个就简单说下吧,就是算是个配置,可以配多个,具体哪个生效可以通过mvn命令指定,或者配置<activeProfiles>

repositories

这里面算是配置的重点

<repository>
      <id>alibaba</id>
      <url>http://code.alibabatech.com/mvn/releases/</url>
      <releases>
              <enabled>true</enabled>
      </releases>
      <snapshots>
               <enabled>false</enabled>
      </snapshots>
</repository>

几个重要的配置,一目了然吧,id标识,url地址,是否从该仓库下release,是否从该仓库下快照版本。
这里就有人会懵逼了,这里怎么又配了个地址,跟mirrors里面的地址哪个生效呢?

好的,那咱们试试。先规定一下配置:

<mirrors>
    <mirror>
        <id>nexus</id>
        <name>mvn.ws.netease.com</name>
        <mirrorOf>central</mirrorOf>
        <url>http://mvn.xxx.com/nexus/content/groups/t_repo_group/</url>       
    </mirror>
  </mirrors>
  <repositories>       
        <repository>
          <id>nexus</id>
          <url>http://mvn.ccc.com/nexus/content/groups/t_repo_group/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
</repositories> 

把地址区分下,mirror里配成xxx,repository配成ccc
随便找一个项目,设定一个不存在的依赖,mvn -U compile下:

可以发现去ccc找了。说明repository里的生效了。

那么mirror里的地址什么时候生效呢?其实刚才说了,mirror里的是靠mirrorOf中的内容和repository中id关联的。比如我们把刚才配置改为

<mirrors>
    <mirror>
        <id>nexus</id>
        <name>mvn.ws.netease.com</name>
            <mirrorOf>central</mirrorOf>
        <url>http://mvn.xxx.com/nexus/content/groups/t_repo_group/</url>       
    </mirror>
  </mirrors>
  <repositories>       
        <repository>
          <id>central</id>
          <url>http://mvn.ccc.com/nexus/content/groups/t_repo_group/</url>
          <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
        </repository>
</repositories> 

把repository中的id改成central

这样就行了。此外mirrorOf中可以配置通配符,例如*,表示任何repository都和这个关联。

其实简单来说就是如果repository的id能和mirrorOf关联上,那么url以mirror的为准,否则以repository中自己的url为准。

其他还有一些点,repositories中可以配置多个repository,配置多个话,一个找不到会找下一个,比如我们在刚才基础上加上阿里的配置

<repositories>       
        <repository>
          <id>nexus</id>
          <url>http://mvn.ccc.com/nexus/content/groups/t_repo_group/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
                <id>alibaba</id>
                <url>http://code.alibabatech.com/mvn/releases/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository> 
</repositories>

在构建一次:

当配置多个时,会逐一进行下载尝试。

总结

咱们在回顾下起初的配置,可以看到启用的profile是dev,dev中的repository的id是nexus,跟mirrorOf没有匹配,那么生效的配置就是repository中自己的url配置,所以这里完全可以省略掉mirror的配置。当然如果多个profile公用一个私服地址,也可以指定mirror地址,然后repository中的id指定成和mirrorOf相同,同时可以省略掉自己标签中url。​

此外还有几个点要说,pluginRepositories,配置信息基本和repository一致,不过这个地址是用来下maven的插件的,就是pom中这样的配置

        <plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
                    <webResources>
                        <resource>
                            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                            <filtering>true</filtering>
                            <targetPath>WEB-INF</targetPath>
                            <includes>
                                <include>**</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>

还有,pom也可以指定repository:

这样配置会和settings.xml中生效的配置合并,并优先从这个库找,找不到继续走settings.xml配置。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Java OpenCV图像处理之图形与文字绘制

    Java OpenCV图像处理之图形与文字绘制

    这篇文章主要为大家介绍了如何利益Java OpenCV实现在图像上绘制文字与形状,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • java中使用DES加密解密实例

    java中使用DES加密解密实例

    这篇文章主要介绍了java中使用DES加密解密实例,需要的朋友可以参考一下
    2014-01-01
  • SpringBoot集成kafka全面实战记录

    SpringBoot集成kafka全面实战记录

    在实际开发中,我们可能有这样的需求,应用A从TopicA获取到消息,经过处理后转发到TopicB,再由应用B监听处理消息,即一个应用处理完成后将该消息转发至其他应用,完成消息的转发,这篇文章主要介绍了SpringBoot集成kafka全面实战,需要的朋友可以参考下
    2021-11-11
  • Java多线程之同步工具类CountDownLatch

    Java多线程之同步工具类CountDownLatch

    这篇文章主要介绍了Java多线程之同步工具类CountDownLatch,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行,下面一起来学习学习内容吧
    2021-10-10
  • Java中两种抛出异常的方式示例详解

    Java中两种抛出异常的方式示例详解

    在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常,本文给大家详细说明java中两种抛出异常的方式,感兴趣的朋友一起看看吧
    2023-08-08
  • 一文带你搞懂Java中Get和Post的使用

    一文带你搞懂Java中Get和Post的使用

    这篇文章主要为大家详细介绍了Java中Get和Post用法的相关资料,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-11-11
  • java连接zookeeper的3种方式小结

    java连接zookeeper的3种方式小结

    这篇文章主要介绍了java连接zookeeper的3种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • idea激活ActivateJrebel热部署的方法详解

    idea激活ActivateJrebel热部署的方法详解

    这篇文章主要介绍了idea激活ActivateJrebel热部署的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 自定义BufferedReader的实例

    自定义BufferedReader的实例

    下面小编就为大家分享一篇自定义BufferedReader的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Spring Boot连接超时导致502错误的实战案例

    Spring Boot连接超时导致502错误的实战案例

    这篇文章主要给大家介绍了关于Spring Boot连接超时导致502错误的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论