前景
趁着最近双十一,买个低配服务器搭建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/
点击Sign in 登录,3.19 密码是一个临时凭证,需要进入nexus-data目录里查看
cat admin.password
复制,使用admin + 凭证,首次登录,进入重设密码。
即可进入私有仓库。
Nexus相关概念介绍
默认启动nexus后,会自动帮我们新建了几个Repositories,如下图:
一般的,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)类型,进入配置页。
这个repository要存储什么类型的库呢,这里有三个选项:
- Release 发布版,代表已经可以正式使用的库文件,需要以RELEASE 结尾的,或者使用命令mvn deploy -P release,版本号后不带-SNAPSHOT故当成是正式发布版本
- Snapshots 快照版,以SNAPSHOTS 结尾的不稳定版本
- Mixed 混乱版,版本无特别要求
这里我创建一个Mixed 类型的仓库,并且注意,Deployment pollcy 要选择 Allow redeploy 允许库远程部署,才能把本地包部署到nexus上。
新建Users
配置一个个人账号,用户上传本地库是验证,进入create页
创建一个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>
- 创建一个项目,添加配置
<?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里就可以看到我们上传的公共包了。
- 上传本地 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>
到此,完整的nexus从搭建到使用就演示完成了,小伙伴们可自己动手实践下。有问题欢迎留下言共同探讨。