Nexus 搭建 Maven私服竟如此Easy

前景

趁着最近双十一,买个低配服务器搭建Maven的私服,把平常用到的一些jar包,扔到上面,方便使用公司电脑和自己电脑时不会找不到私包。

资源与预装

机器配置: 1核2g
系统: centos

预装Java、maven、docker、docker-compose 等环境

可以使用我简单编写的 脚本进行快速 安装新机环境,将会预装了JAVA、Maven、Gradle、Docker、docker-compose。
脚本地址: https://github.com/liaozihong/linux-install-sh

开始安装Nexus

version: '2'

services:
  nexus:
    image: sonatype/nexus3
    restart: always
    container_name: nexus
    ports:
    - "8081:8081"
    volumes:
    - ./nexus-data:/nexus-data

注意若出现类似以下权限不足的问题

mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied

mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied

需要为nexus-data进行授权

sudo chown -R 200:200 nexus-data

接着,在启动nexus,若没问题可看到,启动成功标识:

2019-11-12 02:06:57,906+0000 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - 
-------------------------------------------------
Started Sonatype Nexus OSS 3.19.1-01
-------------------------------------------------

进入nexus管理界面,地址就是http://host:8081/

image.png

点击Sign in 登录,3.19 密码是一个临时凭证,需要进入nexus-data目录里查看

cat admin.password

复制,使用admin + 凭证,首次登录,进入重设密码。

image.png

即可进入私有仓库。

Nexus相关概念介绍

默认启动nexus后,会自动帮我们新建了几个Repositories,如下图:

image.png
一般的,repositories有3种类型:

  • proxy 远程仓库的代理,比如说nexus配置了一个central repository的proxy,当用户向这个proxy请求一个artifact的时候,会现在本地查找,如果找不到,则会从远程仓库下载,然后返回给用户。
  • hosted 宿主仓库,用户可以把自己的一些仓库deploy到这个仓库中
  • group 仓库组,是nexus特有的概念,目的是将多个仓库整合,对用户暴露统一的地址,这样就不需要配置多个仓库地址。

介绍下,几个默认已经建好的仓库:

  • maven-central ,这是一个 proxy 类型的仓库,点进去可以看到,它代理的远程仓库地址是:https://repo1.maven.org/maven2/
  • maven-public ,这是一个 group 类型的仓库,它涵盖了maven-releases、maven-snapshots、maven-central仓库,也就是我们只要在本地添加这个仓库,就可以依赖到这3个仓库的包了。

上传本地库

那么,重点来了,我们怎么将本地的依赖库上传到nexus上呢,很简单了,确保nexus上有相应的repositories,可以上传到默认已有的maven-*,也可以新建属于自己的repositories,这里演示下新建。

新建repositories

点击Create repository,选择maven2(hosted)类型,进入配置页。

image.png
这个repository要存储什么类型的库呢,这里有三个选项:

  • Release 发布版,代表已经可以正式使用的库文件,需要以RELEASE 结尾的,或者使用命令mvn deploy -P release,版本号后不带-SNAPSHOT故当成是正式发布版本
  • Snapshots 快照版,以SNAPSHOTS 结尾的不稳定版本
  • Mixed 混乱版,版本无特别要求

这里我创建一个Mixed 类型的仓库,并且注意,Deployment pollcy 要选择 Allow redeploy 允许库远程部署,才能把本地包部署到nexus上。

新建Users

配置一个个人账号,用户上传本地库是验证,进入create页
image.png
创建一个admin类型的账号。

接着,在本地上,需要配置maven,编辑setting.xml,添加以下内容

<?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">
    <servers>
      <server>
        <id>local</id>
        <!--自己新建的Users-->
        <username>zoey</username>
        <password>12415124</password>
      </server>
    </servers>
</settings>
  1. 创建一个项目,添加配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dashuai.commons</groupId>
    <artifactId>java-commons-base</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>java-commons-base</name>
    <description>基础类库</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--指定仓库地址-->
    <distributionManagement>
        <repository>
            <!--此名称要和.m2/settings.xml中设置的ID一致-->
            <id>local</id>
            <url>http://ip:8081/repository/Zoey-Mixed/</url>
        </repository>
    </distributionManagement>

    <dependencies>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>aliyun</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
</project>

使用命令将库部署到nexus,若想取消测试用例,加上-Dmaven.test.skip=true 即可

mvn deploy 

成功后,在Search里就可以看到我们上传的公共包了。
image.png

  1. 上传本地 Jar 包至私服,使用命令即可:
mvn deploy:deploy-file -DgroupId=xxx -DartifactId=xxx -Dversion=xxx -Dpackaging=jar -Dfile=xxx -Durl=http://xxx:8081/repository/3rdParty/ -DrepositoryId=xxx

本地依赖私服仓库

当需要在本地依赖到远程的库时,只需在pom.xml了中添加如下代码。

    <dependencies>
        <dependency>
            <groupId>com.dashuai.commons</groupId>
            <artifactId>java-commons-utils</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>test</id>
            <url>http://ip:8081/repository/Zoey-Mixed/</url>
        </repository>
    </repositories>

image.png

到此,完整的nexus从搭建到使用就演示完成了,小伙伴们可自己动手实践下。有问题欢迎留下言共同探讨。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章