首页 / 常见问题 / Maven 构建时,如何配置 Nexus 的地址?

Maven 构建时,如何配置 Nexus 的地址?

场景描述

平台在创建 Java 构建流水线时,无法配置 Nexus 的地址,可按照下面的操作步骤解决。

前提条件

您使用的 Jenkins 须为平台快速部署并集成的 Jenkins 工具。

解决方法

  1. 在左侧导航栏中,单击 工具链管理 > 工具链集成

  2. 单击 Jenkins 工具卡片。

  3. 单击 实例 右侧的 实例名称,进入部署详情页面。

  4. 在下方的 构建节点 区域,找到平台默认的构建节点 Java

  5. 单击 更新构建节点,开启 Maven Settings 文件 开关,参考以下示例,修改相关参数并添加代码至 内容 框中:

    参数 描述
    <servers> 配置 Nexus 的认证信息。
    <mirrors> 配置 profiles.profile.repositories.repository.idprofiles.profile.pluginRepositories.pluginRepository.id 的重定向镜像仓库地址。
    <profiles> 配置依赖仓库地址和插件仓库地址,profile.id 作为唯一标识。
    <activeProfiles> 配置 profile.id 启动时生效 profile。
    <?xml version="1.0" encoding="UTF-8"?> 
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"  
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
    
      <pluginGroups></pluginGroups> 
      <proxies></proxies> 
    
      <servers> 
          <server> 
          <id>nexus-releases</id> 
          <username>admin</username> 
          <password>Nexus12345</password> 
        </server> 
        <server> 
          <id>nexus-snapshots</id> 
          <username>admin</username> 
          <password>Nexus12345</password> 
        </server> 
      </servers> 
    
      <mirrors>  
        <mirror>  
          <id>nexus-releases</id>  
          <mirrorOf>*</mirrorOf>  
          <url>http://192.168.1.1:31108/repository/maven-public/</url>  
        </mirror> 
        <mirror>  
          <id>nexus-snapshots</id>  
          <mirrorOf>*</mirrorOf>  
          <url>http://192.168.1.1:31108/repository/maven-public/</url>  
        </mirror>  
      </mirrors>  
    
      <profiles> 
       <profile> 
          <id>nexus</id> 
          <repositories> 
            <repository> 
              <id>nexus-releases</id> 
              <url>http://192.168.1.1:31108/repository/maven-public/</url> 
              <releases><enabled>true</enabled></releases> 
              <snapshots><enabled>true</enabled></snapshots> 
            </repository> 
            <repository> 
              <id>nexus-snapshots</id> 
              <url>http://192.168.1.1:31108/repository/maven-public/</url> 
              <releases><enabled>true</enabled></releases> 
              <snapshots><enabled>true</enabled></snapshots> 
            </repository> 
          </repositories> 
          <pluginRepositories> 
             <pluginRepository> 
                    <id>nexus-releases</id> 
                     <url>http://192.168.1.1:31108/repository/maven-public/</url> 
                     <releases><enabled>true</enabled></releases> 
                     <snapshots><enabled>true</enabled></snapshots> 
                   </pluginRepository> 
                   <pluginRepository> 
                     <id>nexus-snapshots</id> 
                      <url>http://192.168.1.1:31108/repository/maven-public/</url> 
                    <releases><enabled>true</enabled></releases> 
                     <snapshots><enabled>true</enabled></snapshots> 
                 </pluginRepository> 
             </pluginRepositories> 
        </profile> 
      </profiles> 
    
      <activeProfiles> 
          <activeProfile>nexus</activeProfile> 
      </activeProfiles> 
    
    </settings>
  6. 如果构建命令使用 mvn clean deploy,会将依赖包上传至上面已配置的 Nexus 中,除了上述步骤还需在 pom.xml 中配置 distributionManagement,代码示例如下:

    注意

    1. distributionManagement 被包含在 project 参数中。

    2. 配置 release 库和 snapshots 库时,根据 Nexus Repository 版本策略配置,两者的 URL 应不同,并且不能使用 group 类型的 Repository(也就是 maven-public)。

    <project>
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>http://192.168.1.1:31108/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://192.168.1.1:31108/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    
    </project>
  7. 至此,配置完成。若当前项目的版本号的后缀名中带有 -SNAPSHOT,流水线就会将产物上传到 snapshots 库中,其他的会上传到 releases 库中。