当前位置:   article > 正文

彻底理解maven + 配置私服 + 阿里云镜像_maven配置阿里云镜像

maven配置阿里云镜像

关于maven配置本地私服和镜像的流程,网上一大堆,写的神乎其乎,初学者总是很难理解其中的真正原理,
    笔者通过这篇文章来终结他们;
    
    setting.xml的结构
    
    

  1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  2.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.         xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  4.                           https://maven.apache.org/xsd/settings-1.0.0.xsd">  
  5.         <localRepository/>
  6.         <interactiveMode/>
  7.         <offline/>
  8.         <pluginGroups/>
  9.         <servers/>
  10.         <mirrors/>
  11.         <proxies/>
  12.         <profiles/>
  13.         <activeProfiles/>
  14.     </settings>

    
    localRepository: 配置本地存储库的位置,默认为${user.home}/.m2/repository
    interactiveMode: 是否与用户开启交互模式,默认为 true
    offline: 离线模式,默认为 false
    pluginGroups: 比如<pluginGroup>org.eclipse.jetty</pluginGroup>, 默认有org.apache.maven.plugins and org.codehaus.mojo。
    servers: 配置私服的用户名和密码
    mirrors: mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
    proxies: 代理配置
    profiles: 配置环境
    activeProfiles: 配置默认激活的环境
    

配置镜像

    因为中央仓库在国外,下载比较慢,所以可以配置为定向到阿里云镜像,阿里云镜像里面一般都很全
  

  1. <mirror>
  2.         <id>Nexus-aliyun</id>
  3.         <mirrorOf>central</mirrorOf>
  4.         <name>Nexus aliyun</name>
  5.         <url>https://maven.aliyun.com/repository/central</url>
  6.     </mirror>

    
    这样访问中央仓库时就会定位到阿里云,不再访问中央仓库。如果阿里云仓库没有呢?怎么办?这种情况一般不会出现,因为阿里云仓库的jar很全
    如果你希望如果在阿里云镜像找不到资源时也可以访问问中央仓库,那么阿里云镜像就不能使用<mirrorOf>central</mirrorOf>,可以把阿里云镜像配置成一个私服,
    如<mirrorOf>aliyun</mirrorOf>
    
    关于mirrorOf,如果有同名的mirrorOf,那么只会匹配第一个,
    如果有<mirrorOf>*</mirrorOf>,优先匹配名字完全相同的,其次匹配通配符
    
   

配置profile
    
 

  1. <profile>
  2.         
  3.         <id>nexus-mr</id>
  4.         
  5.         <repositories>
  6.             <!-- 配置的顺序决定了下载 jar 包的顺序 -->
  7.             <!--  maven下载时,按顺序查找,优先找nexus,找不到再找central  -->
  8.             
  9.             <!-- 这里nexus为我的私服地址 -->
  10.             <repository>
  11.                  <id>nexus</id>
  12.                 <url>http://172.16.8.6:8082/repository/maven-public/</url>
  13.                 <releases><enabled>true</enabled></releases>
  14.                 <snapshots><enabled>true</enabled></snapshots>
  15.             </repository>
  16.             
  17.             <!-- 中央仓库此处可省略 -->
  18.             <repository>
  19.                  <id>central</id>
  20.                 <url>https://maven.aliyun.com/repository/central</url>
  21.                 <releases><enabled>true</enabled></releases>
  22.                 <snapshots><enabled>true</enabled></snapshots>
  23.             </repository>
  24.             
  25.             
  26.         </repositories>
  27.         <pluginRepositories>
  28.             <pluginRepository>          
  29.                 <id>nexus</id>
  30.                  <url>http://172.16.8.6:8082/repository/maven-public/</url>
  31.                  <releases><enabled>true</enabled></releases>
  32.                 <snapshots><enabled>true</enabled></snapshots>
  33.             </pluginRepository>
  34.             
  35.             <pluginRepository>          
  36.                 <id>central</id>
  37.                  <url>https://maven.aliyun.com/repository/central</url>
  38.                  <releases><enabled>true</enabled></releases>
  39.                 <snapshots><enabled>true</enabled></snapshots>
  40.             </pluginRepository>
  41.             
  42.             
  43.         </pluginRepositories>
  44.         
  45.         
  46.     </profile>
  47.     <!--配置activeProfiles
  48.     用于激活前面的环境配置-->
  49.     
  50.   
  51.  <activeProfiles>
  52.         <activeProfile>nexus-mr</activeProfile>
  53.     </activeProfiles>

 
  

 完整的setting.xml配置如下

   

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.     <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3.               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.               xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5.         
  6.         <!-- 本地存放jar的位置 -->
  7.         <localRepository>D:\m2\repository</localRepository>
  8.       
  9.  
  10.       <pluginGroups>
  11.       
  12.         
  13.         <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
  14.         
  15.       </pluginGroups>
  16.  
  17.      
  18.       <proxies>
  19.         
  20.       </proxies>
  21.  
  22.       
  23.       <servers>
  24.         <!-- 此处为我自己的私服账号配置 -->
  25.         <server>
  26.           <id>maven_3rd_party</id>
  27.           <username>maven</username>
  28.           <password>maven</password>
  29.         </server>
  30.         <server>
  31.           <id>maven-releases</id>
  32.           <username>maven</username>
  33.           <password>maven</password>
  34.         </server>
  35.         <server>
  36.           <id>maven-snapshots</id>
  37.           <username>maven</username>
  38.           <password>maven</password>
  39.         </server>
  40.             
  41.       </servers>
  42.  
  43.  
  44.       <mirrors>
  45.         
  46.         <!-- 此处的mirrorOf不能随便写,要和下面profile中的repository name标签的一致 ;如果配置的是central,后面profile中可以省略配置对应的central  --> 
  47.         <!-- 
  48.             maven获取真正起作用的repository集合流程:首先会获取pom.xml里的repository集合,然后在settings.xml里找mirrors元素,
  49.             如果repository的id和mirror的mirrorOf的值相同,则该mirror替代该repository
  50.             如果该repository找不到对应的mirror,
  51.             则使用其本身,依此可以得到最终起作用的repository集合
  52.         -->
  53.          
  54.          
  55.          
  56.          
  57.         <!-- 将 central 的请求重定向到阿里云的公共 Maven 仓库 -->
  58.         <!-- 其它的不重定向到阿里云 -->
  59.         <mirror>
  60.             <id>Nexus-aliyun</id>
  61.             <mirrorOf>central</mirrorOf>
  62.             <name>Nexus aliyun</name>
  63.             <url>https://maven.aliyun.com/repository/central</url>
  64.         </mirror>
  65.         
  66.         
  67.         
  68.       </mirrors>
  69.  
  70.       
  71.       <profiles>
  72.         
  73.             <profile>
  74.                 
  75.                 <id>nexus-mr</id>
  76.                 
  77.                 <!-- 
  78.                 这里的 repositories 如果不配置的话,默认会有一个 Maven 中央仓库的配置,
  79.                 同样 pluginRepositories 中如果没有配置的话,默认也是有一个 Maven 中央仓库的配置。
  80.                 还有!如果 repositories 中没有配置 repository.id 是 central 的 repository
  81.                 会自动增加一个 Maven 中央仓库的配置,并且是以追加的方式,也就是配置在 repositories 的最后一个。
  82.                 所以如果只配置了私服的 repository 情况下,就会先去私服中下载,私服中下载不到时再去追加上来的 Maven 中央仓库中下载
  83.                 
  84.                 -->
  85.                 
  86.                 <repositories>
  87.                 <!-- 配置的顺序决定了下载 jar 包的顺序 -->
  88.                     <repository>
  89.                          <id>nexus</id>
  90.                         <url>http://172.16.8.6:8082/repository/maven-public/</url>
  91.                         <releases><enabled>true</enabled></releases>
  92.                         <snapshots><enabled>true</enabled></snapshots>
  93.                     </repository>
  94.                     
  95.                     <!-- 
  96.                         如果前面mirrorOf配置了central定位到阿里云镜像,这里的central配置可以省略,nexus中找不到会自动根据central去阿里云镜像查找;
  97.                     
  98.                         如果上面mirrorOf没有配置central ,这里不配central的话,nexus中找不到会自动去maven默认中央仓库找
  99.                     
  100.                     -->
  101.                     <repository>
  102.                          <id>central</id>
  103.                         <url>https://maven.aliyun.com/repository/central</url>
  104.                         <releases><enabled>true</enabled></releases>
  105.                         <snapshots><enabled>true</enabled></snapshots>
  106.                     </repository>
  107.                     
  108.                     
  109.                 </repositories>
  110.                 <pluginRepositories>
  111.                     <pluginRepository>          
  112.                         <id>nexus</id>
  113.                          <url>http://172.16.8.6:8082/repository/maven-public/</url>
  114.                          <releases><enabled>true</enabled></releases>
  115.                         <snapshots><enabled>true</enabled></snapshots>
  116.                     </pluginRepository>
  117.                     
  118.                     <pluginRepository>          
  119.                         <id>central</id>
  120.                          <url>https://maven.aliyun.com/repository/central</url>
  121.                          <releases><enabled>true</enabled></releases>
  122.                         <snapshots><enabled>true</enabled></snapshots>
  123.                     </pluginRepository>
  124.                     
  125.                     
  126.                 </pluginRepositories>
  127.                 
  128.                 
  129.                 
  130.             </profile>
  131.             <profile>
  132.                 <id>jdk-1.8</id>
  133.  
  134.                 <activation>
  135.                     <activeByDefault>true</activeByDefault>
  136.                     <jdk>1.8</jdk>
  137.                 </activation>
  138.  
  139.                 <properties>
  140.                     <maven.compiler.source>1.8</maven.compiler.source>
  141.                     <maven.compiler.target>1.8</maven.compiler.target>
  142.                     <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  143.                 </properties>
  144.             </profile>
  145.             
  146.         </profiles>
  147.         <activeProfiles>
  148.             <!-- 激活环境配置 ,使上面的配置生效 --> 
  149.             <activeProfile>nexus-mr</activeProfile>
  150.         </activeProfiles>
  151.     </settings>

  
    注意:此文中虽然mirrorOf和profile中central都同时配置了,也可以无需都配置,二者有一个配置了就可以了
    如果你想把私服nexus也配置成mirrorOf也可以,但mirrorOf不可配置为*,否则全部请求都走nexus了,不会走central
    
    
    测试,我们测试一下是否走了阿里云镜像
    项目中增加一个新的pom
    

  1. <dependency>
  2.         <groupId>org.springframework.cloud</groupId>
  3.         <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  4.         <version>0.2.1.RELEASE</version>
  5.     </dependency>

    
    
    更新maven,到本地下载的m2e-lastUpdated.properties文件中查看下载信息,

内容为
    
    nexus|http\://172.16.8.6\:8082/repository/maven-public/|sources=1628230775917
    Nexus-aliyun|https\://maven.aliyun.com/repository/central|sources=1628230775917
    
    
    证明maven访问仓库顺序为:172.16.8.6(nexus)、 maven.aliyun.com(阿里云镜像)
    
    我们将上面的mirrorOf和profile中的central对应的配置都注释,删除本地jar,再次更新项目maven,内容变成:
    
    nexus|http\://172.16.8.6\:8082/repository/maven-public/|javadoc=1628217742198
    nexus|http\://172.16.8.6\:8082/repository/maven-public/|sources=1628217716685
    central|https\://repo.maven.apache.org/maven2|javadoc=1628217742198
    central|https\://repo.maven.apache.org/maven2|sources=1628217716685
    
    证明maven访问仓库顺序为:172.16.8.6(nexus)、repo.maven.apache.org(默认中央仓库)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号