利用 nexus 部署 maven 私库

nexus3 配置

Repository > Repositories

  • 添加一个新的存储库
  • 选择 maven2 (proxy)
  • 输入以下项(其他使用默认值)
    • Name maven-central
    • Remote store https://maven.aliyun.com/repository/public

Security > Roles

添加一个新的 Role

  • 类型选择 Nexus role
  • ID 设为 publish
  • Privileges 添加以下项:
    • nx-repository-view-*-*-add
    • nx-repository-view-*-*-edit
  • Roles 添加以下项:
    • nx-anonymous

Security > Users

添加一个 User

  • ID 设为 publish
  • Roles 添加以下项:
    • publish

System > Tasks

  • 创建任务 Admin - Compact blob store
  • 创建任务 Docker-Delete incomplete uploads

maven

仓库镜像

修改 settings.xml

<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
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>central,public</mirrorOf>
        <url>http://repo.lan.cn/repository/maven-public/</url>
    </mirror>
  </mirrors>
</settings>

发布到私库

  1. 修改 settings.xml

servers > server > id 与 pom.xml 中 distributionManagement > repository > id 相匹配。

<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
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>central,public</mirrorOf>
        <url>http://repo.lan.cn/repository/maven-public/</url>
    </mirror>
  </mirrors>

  <servers>
    <!-- 发布 release -->
    <server>
      <id>releases</id>
      <username>publish</username>
      <password>publish</password>
    </server>
    <!-- 发布 snapshot -->
    <server>
      <id>snapshots</id>
      <username>publish</username>
      <password>publish</password>
      </server>
  </servers>
</settings>
  1. 修改 pom.xml
<project>
    ...
    <distributionManagement>
        <!-- 发布 release -->
        <repository>
            <id>releases</id>
            <url>http://repo.lan.cn/repository/maven-releases/</url>
        </repository>
        <!-- 发布 snapshot -->
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://repo.lan.cn/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    ...
</project>
  1. 发布

通常 nexus 的 releases 库不允许重新发布,snaphost 库允许重新发布。因为开发阶段会反复提交,所以通常会配置发布到 snapshots 库。

发布 snapshot 时,pom version 要有 -SNAPSHOT 。module 中的 pom 修改关联 version ,parent 等该加 -SNAPSHOT 的都加上。

modules 的 pom 会自动继承,如果其 pom 中没有 version 属性,代表使用根目录 pom 中的设置。

# 整体项目
mvn deploy
# 单个 module
mvn deploy -pl subproject

引入私库

  • 方法1:修改 settings.xml
<settings>
  ...
  <profiles>
    <profile>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>nexus-public</id>
          <name>Nexus Public Repository</name>
          <url>http://repo.lan.cn/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  ...
</settings>
  • 方法2:修改 pom.xml
<project>
    ...
    <repositories>
        <repository>
            <id>public</id>
            <url>http://repo.lan.cn/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
    ...
</project>

关联阅读:利用 nexus 布署私有 npm 仓库