使用nexus搭建maven私有云远程仓库
admin
撰写于 2025年 03月 18 日

nexus是一款仓库管理软件,不仅可以针对Java生态的仓库,还包括Debian的apt,支持很多编程语言的仓库,例如,Go,Python,NPM等等。

在这里,我们主要说明Java的Maven仓库管理。

由于官网比较慢,这里也不推荐直接下载安装包安装。推荐使用Docker快速一键部署。

如果实在需要,点击我进入官网下载页面

安装本教程确保你已经安装了Docker

安装步骤

  1. 创建数据卷容器
docker volume create --name nexus-data
  1. 启动nexus容器
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
  1. 访问主页

    http://localhost:8081

​ 设置相关密码

优秀配置

仓库设置

我们推荐的使用配置请求寻找顺序

代理仓库——本机仓库(分为release和snapshot)—— 中央仓库

原因:快,方便,使用代理加速下载中央仓库的依赖包,如果代理没有,一般你自己发布的依赖包没有推送到中央仓库,可以在本机快速找到,最后如果都没找到再去中央仓库找,因为代理仓库存在与中央仓库同步延时的可能。

是是是

新增阿里云仓库

点击创建仓库按钮 “Create repository”

仓库名称:aliyun-repository

选择格式:maven2

类型:proxy

阿里云代理镜像地址:http://test.server.daluu.com:8011/repository/aliyun-repository/

maven-aliyun-nexus仓库设置

设置本机远程仓库地址

打开 maven-public,注意这是一个文件夹的形式,是聚合了一组仓库,可以配置优先级请求访问仓库

按照下面的参考配置

maven仓库优先级设置

maven本地设置

以上配置好镜像仓库的设置之后,需要在本地电脑启用对接这个私有远程仓库。

打开maven安装地址,找到conf目录,编辑 setting.xml

找到 节点,新增如下配置,用于项目打包部署Jar,maven命令 deploy

<!-- 配置Maven连接私服打包上传项目 -->
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>520code.net</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>520code.net</password>
    </server>

找到 节点,新增如下配置,用于项目获取依赖,如果有其他镜像请先移除

<!-- 私服中已经包含了代理阿里云仓库 -->
    <mirror>
      <!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
      <id>nexus</id>
      <!--*指的是访问任何仓库都使用我们的私服-->
      <mirrorOf>*</mirrorOf>    
      <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
      <url>http://localhost:8011/repository/maven-public/</url>     
    </mirror>   

找到 节点,新增如下配置,指定仓库的依赖获取路径和插件路径

 <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <name>Nexus</name>
                    <url>http://test.server.daluu.com:8011/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    <!-- 针对快照 实时更新,如果不设置,需要删除仓库版本或者建立新版本号才能更新到 -->
                        <updatePolicy>always</updatePolicy>  
                        <checksumPolicy>warn</checksumPolicy>   
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <name>Nexus</name>
                    <url>http://test.server.daluu.com:8011/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
 <!-- 针对快照 实时更新,如果不设置,需要删除仓库版本或者建立新版本号才能更新到 快照更新频繁,有时候不想更新版本号 -->
                        <updatePolicy>always</updatePolicy>  
                        <checksumPolicy>warn</checksumPolicy>  
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>

启动指定的配置

    <!-- 配置了profile之后,需要打开配置,否则无用 -->
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

以上是全局配置,在本机项目只要指定maven的这个配置文件就会生效

本地项目pom设置

项目发布到远程仓库

如果你自己开发了一个框架,需要推送到远程仓库,给其他项目使用,需要在项目的父pom文件增加如下配置:

<distributionManagement>
    <repository>
        <id>releases</id>
        <name>Releases</name>
        <url>http://test.server.daluu.com:8011/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>Snapshot</name>
        <url>http://test.server.daluu.com:8011/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意这里配置了两个发布地址,一个是 正式版,一个是快照版本

正式版:已经稳定运行的版本

快照版本:开发迭代版本

如果决定我当前发布是正式版还是快照版本呢?

<groupId>com.oneinlet</groupId>
<artifactId>SuperRocket</artifactId>
<packaging>pom</packaging>
<!-- 是否快照版本取决于版本号带不带SNAPSHOT -->
<version>1.0-SNAPSHOT</version>

如果你需要忽略某个项目模块被部署,增加如下配置:


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

如果你只是临时使用一些远程仓库,在项目pom文件配置:

  <repositories>
        <!--指向正确的服务器地址 -->       
        <repository>
            <id>aliyun-repos</id>
            <name>aliyun Releases</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
  <repositories>      

使用nexus搭建maven私有云远程仓库

nexus是一款仓库管理软件,不仅可以针对Java生态的仓库,还包括Debian的apt,支持很多编程语言的仓库,例如,Go,Python,NPM等等。

在这里,我们主要说明Java的Maven仓库管理。

由于官网比较慢,这里也不推荐直接下载安装包安装。推荐使用Docker快速一键部署。

如果实在需要,点击我进入官网下载页面

安装本教程确保你已经安装了Docker

安装步骤

  1. 创建数据卷容器
docker volume create --name nexus-data
  1. 启动nexus容器
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
  1. 访问主页

    http://localhost:8081

​ 设置相关密码

优秀配置

仓库设置

我们推荐的使用配置请求寻找顺序

代理仓库——本机仓库(分为release和snapshot)—— 中央仓库

原因:快,方便,使用代理加速下载中央仓库的依赖包,如果代理没有,一般你自己发布的依赖包没有推送到中央仓库,可以在本机快速找到,最后如果都没找到再去中央仓库找,因为代理仓库存在与中央仓库同步延时的可能。

是是是

新增阿里云仓库

点击创建仓库按钮 “Create repository”

仓库名称:aliyun-repository

选择格式:maven2

类型:proxy

阿里云代理镜像地址:http://test.server.daluu.com:8011/repository/aliyun-repository/

maven-aliyun-nexus仓库设置

设置本机远程仓库地址

打开 maven-public,注意这是一个文件夹的形式,是聚合了一组仓库,可以配置优先级请求访问仓库

按照下面的参考配置

maven仓库优先级设置

maven本地设置

以上配置好镜像仓库的设置之后,需要在本地电脑启用对接这个私有远程仓库。

打开maven安装地址,找到conf目录,编辑 setting.xml

找到 节点,新增如下配置,用于项目打包部署Jar,maven命令 deploy

<!-- 配置Maven连接私服打包上传项目 -->
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>520code.net</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>520code.net</password>
    </server>

找到 节点,新增如下配置,用于项目获取依赖,如果有其他镜像请先移除

<!-- 私服中已经包含了代理阿里云仓库 -->
    <mirror>
      <!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
      <id>nexus</id>
      <!--*指的是访问任何仓库都使用我们的私服-->
      <mirrorOf>*</mirrorOf>    
      <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
      <url>http://localhost:8011/repository/maven-public/</url>     
    </mirror>   

找到 节点,新增如下配置,指定仓库的依赖获取路径和插件路径

 <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <name>Nexus</name>
                    <url>http://test.server.daluu.com:8011/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    <!-- 针对快照 实时更新,如果不设置,需要删除仓库版本或者建立新版本号才能更新到 -->
                        <updatePolicy>always</updatePolicy>  
                        <checksumPolicy>warn</checksumPolicy>   
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <name>Nexus</name>
                    <url>http://test.server.daluu.com:8011/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
 <!-- 针对快照 实时更新,如果不设置,需要删除仓库版本或者建立新版本号才能更新到 快照更新频繁,有时候不想更新版本号 -->
                        <updatePolicy>always</updatePolicy>  
                        <checksumPolicy>warn</checksumPolicy>  
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>

启动指定的配置

    <!-- 配置了profile之后,需要打开配置,否则无用 -->
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

以上是全局配置,在本机项目只要指定maven的这个配置文件就会生效

本地项目pom设置

项目发布到远程仓库

如果你自己开发了一个框架,需要推送到远程仓库,给其他项目使用,需要在项目的父pom文件增加如下配置:

<distributionManagement>
    <repository>
        <id>releases</id>
        <name>Releases</name>
        <url>http://test.server.daluu.com:8011/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>Snapshot</name>
        <url>http://test.server.daluu.com:8011/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意这里配置了两个发布地址,一个是 正式版,一个是快照版本

正式版:已经稳定运行的版本

快照版本:开发迭代版本

如果决定我当前发布是正式版还是快照版本呢?

<groupId>com.oneinlet</groupId>
<artifactId>SuperRocket</artifactId>
<packaging>pom</packaging>
<!-- 是否快照版本取决于版本号带不带SNAPSHOT -->
<version>1.0-SNAPSHOT</version>

如果你需要忽略某个项目模块被部署,增加如下配置:


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

如果你只是临时使用一些远程仓库,在项目pom文件配置:

  <repositories>
        <!--指向正确的服务器地址 -->       
        <repository>
            <id>aliyun-repos</id>
            <name>aliyun Releases</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
  <repositories>      

赞 (0)

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论