基于Docker搭建Nexus 做 Maven私服

  |     |  

前景

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

资源与预装

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

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

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

开始安装Nexus

1
2
3
4
5
6
7
8
9
10
11
version: '2'

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

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

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

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

需要为nexus-data进行授权

1
sudo chown -R 200:200 nexus-data

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

1
2
3
4
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目录里查看

1
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,添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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. 创建一个项目,添加配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?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 即可

    1
    mvn deploy

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

  2. 上传本地 Jar 包至私服,使用命令即可:

    1
    mvn deploy:deploy-file -DgroupId=xxx -DartifactId=xxx -Dversion=xxx -Dpackaging=jar -Dfile=xxx -Durl=http://xxx:8081/repository/3rdParty/ -DrepositoryId=xxx

本地依赖私服仓库

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<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从搭建到使用就演示完成了,小伙伴们可自己动手实践下。有问题欢迎留下言共同探讨。

文章目录
  1. 1. 前景
  2. 2. 资源与预装
  3. 3. 开始安装Nexus
  4. 4. Nexus相关概念介绍
  5. 5. 上传本地库
    1. 5.1. 新建repositories
    2. 5.2. 新建Users
  6. 6. 本地依赖私服仓库
作者共写了51.2k个字 本站总访问量  |   您是访问本站的第个小伙伴