Maven进阶系列-仓库和镜像

Maven进阶系列-仓库和镜像

文章目录

  • Maven进阶系列-仓库和镜像
    • 1. 仓库
      • 1.1 仓库类型
      • 1.2 寻找jar的基本优先级顺序:
      • 1.3 仓库优先次序验证示例
    • 2. settings.xml文件
      • 2.1 mirrors
        • 2.1.1 没有配置mirror
        • 2.1.2 配置了mirror
        • 2.1.3
      • 2.2 servers
      • 2.3 profiles

1. 仓库

1.1 仓库类型

本地仓库、远程中央仓库、公司自己搭建的私有仓库
Maven进阶系列-仓库和镜像_第1张图片

1.2 寻找jar的基本优先级顺序:

本地仓库 > settings.xml的profile的仓库 > pom.xml的profile的仓库 >pom.xml的仓库 > 中央仓库

maven 寻找得顺序大致可以理解为:
1. 在本地仓库中寻找,如果没有则进入下一步。
2. 在全局应用的私服仓库中寻找,如果没有则进入下一步。
3. 在项目自身的私服仓库中寻找,如果没有则进入下一步。
4. 在中央仓库中寻找,如果没有则终止寻找。

补充:
1. 如果在找寻的过程中,如果发现该仓库有镜像设置,则用镜像的地址代替。
2. 如果仓库的 id 设置成 “central”,则该配置会覆盖 maven 默认的中央仓库配置。

设置仓库的方式有两种,一种是在项目最顶级POM.xml中设置,另一种是在settings.xml中设置。

1.3 仓库优先次序验证示例

在pom.xml中设置

 
        
            pom-repository-first
            pom-repository-first
            http://192.168.100.100:8181/nexus/content/groups/public
        
        
            pom-repository-second
            pom-repository-second
            http://192.168.100.100:8182/nexus/content/repositories/thirdparty/
        
    
    
        
            nexus
            Team Nexus Repository
            http://192.168.100.100:8181/nexus/content/groups/public
        
    


    
        8
        8
    

    
        
            pom-profile-first
            
                
                    pom-repository-first
                    pom-repository-first
                    http://192.168.100.100:8084/nexus/content/groups/public
                    
                        true
                    
                    
                        true
                    
                
            
            
            
                true
            
        
    

settings.xml中设定:





    D:\Program Files\apache-maven-3.6.1\repository

    
        
        
        
        
            
            aliyun
            阿里云仓库地址
            http://maven.aliyun.com/nexus/content/groups/public
            
            central
        
    


    
        
        
            jdk1.8
            
                true
                1.8
            
            
                UTF-8
                1.8
                1.8
                1.8
            
        
        
        
            settings-profile-aliyun
            
                
                    settings-repository-aliyun
                    http://maven.aliyun.com/nexus/content/groups/public/
                    
                        true
                    
                    
                        true
                    
                
            
        
        
            settings-profile-first
            
                
                    settings-repository-first
                    settings-repository-first
                    http://192.168.100.100:8183/nexus/content/groups/public
                    
                        true
                    
                    
                        true
                    
                
            
        
        
            settings-profile-second
            
                
                    settings-repository-second
                    settings-repository-second
                    http://192.168.100.100:8084/nexus/content/groups/public
                    
                        true
                    
                    
                        true
                    
                
            
        
    
    
    
        jdk1.8
        settings-profile-aliyun
        settings-profile-first
        settings-profile-second
    



Maven进阶系列-仓库和镜像_第2张图片

2. settings.xml文件

settings 主要由mirrors、servers 和profiles 三部分组成。

2.1 mirrors

mirror相当于一个拦截器,它会拦截 maven 对 remote repository 的相关请求,把请求里的 remote repository 地址,重定向到 mirror 里配置的地址。

2.1.1 没有配置mirror

Maven进阶系列-仓库和镜像_第3张图片

2.1.2 配置了mirror

Maven进阶系列-仓库和镜像_第4张图片

上述图中B仓库被称为A仓库的镜像。

2.1.3

标签里面放置的是要被镜像的 Repository ID。为了满足一些复杂的需求,Maven 还支持更高级的镜像配置:

  • * :匹配所有远程仓库
  • repo1,repo2:匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。
  • *,!repo1: 匹配所有远程仓库,repo1 除外,使用感叹号将仓库从匹配中排除。

2.2 servers

在Maven的配置文件(settings.xml)中,标签用于配置 Maven 与远程仓库的认证信息,以便于 Maven 在构建或发布时进行认证。

例如,我们要发布 Maven 项目到 Nexus 私服,可以在 标签中配置私服的地址和认证凭证(用户名、密码等)。这样,当 Maven 在构建或发布时访问私服仓库时,会自动使用这里配置的凭证进行认证。以下是一个 标签的示例配置:


  
    nexus-releases
    myusername
    mypassword
  

其中, 标签指定了私服的 ID,这个 ID 通常是 Nexus 中仓库的名称,例如 “nexus-releases”。 和 分别是私服的访问用户名和密码,用于 Maven 认证访问私服。

这样配置后,在 Maven 执行构建或发布时,就会自动使用这里配置的凭证去访问私服,确保 Maven 在发布时具有足够的权力和权限进行发布操作。

2.3 profiles

在 Maven 的配置文件(settings.xml 或 pom.xml)中, 标签用于配置不同环境下的不同构建选项。例如,有些项目会在开发环境下使用 H2 数据库,而在生产环境下使用 MySQL 数据库,这时就可以使用 标签定义两个不同环境。

每个 标签可以包含独立的一组配置,例如 、、、 等,这些配置将仅在该 激活时生效。可以使用 标签来定义激活该 的条件,例如指定操作系统、Maven 版本、当前构建环境等等。

以下是一个 标签的示例配置:


  
    dev
    
      true
    
    
      org.h2.Driver
      jdbc:h2:mem:testdb
    
  
  
    prod
    
      com.mysql.jdbc.Driver
      jdbc:mysql://localhost/mydb
    
  

在上述示例中,定义了两个 ,一个 ID 为“dev”,另一个为“prod”。 中设置了 “dev” 是默认激活的配置。在 中配置了不同环境下的数据库驱动和数据库连接 URL。在 Maven 的命令执行中,可以选择使用不同的 Profile 从而达到构建不同的环境的目的。例如:

# 构建 dev 环境
mvn -Pdev clean package

# 构建 prod 环境
mvn -Pprod clean package

通过 标签的使用,可以方便地管理多环境下的不同构建配置,提高了项目的灵活性和可维护性,同时也可以更好地符合软件开发的标准流程。

你可能感兴趣的:(maven,maven,java)