下载Nexus
apt-get update
docker pull sonatype/nexus3
cd /usr/local/
mkdir docker
cd docker
mkdir nexus
cd nexus
vim docker-compose.yml 内容如下
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/data:/nexus-data
使用下面的命令(docker-compose up -d)启动后会在当前目录生产data目录,需要加上读写权限
chmod 777 data -R
安装 Docker-compose
apt-get install docker-compose
docker-compose version
docker-compose version 1.17.1, build unknown
docker-py version: 2.5.1
CPython version: 2.7.17
OpenSSL version: OpenSSL 1.1.1 11 Sep 2018
或者不安装Docker-compose直接使用命令启动
docker run -d -p 8081:8081 --name nexus -v /usr/local/docker/nexus/data:/nexus-data --restart=always sonatype/nexus3
启动容器(nexus)
- 在上述的yam文件同级目录下执行
docker-compose up -d
查看容器信息
docker inspect nexus
nexus 使用实战
添加仓库
- 前提:上面的依赖已经安装完成,并已经启动nexus服务。
- 第一次启动时较慢,网页可能没有反应,请多等待一会儿,大约2min左右吧,后续再重启就快了。
- 打开网页输入10.0.1.189:8081 ,未输入登录密码时显示如下
- 点击“Sign in”登录,输入用户名 admin,密码是随机的,需要登录服务器查看,在服务的/usr/local/docker/nexus/data/admin.password里面,不是加密的是明文,复制明文密码登录。
- 登录后,按照提示修改密码,例如修改成admin123,登录后的界面如下
添加“maven2(hosted)”仓库
默认安装有以下这几个仓库,在控制台也可以修改远程仓库的地址,第三方仓库等。
-
hosted:宿主仓库库或托管资源库。
- 存放本公司开发的jar包,可是正式版本也是是测试版本
- 放在本地的资源库,零零散散的jar
- 从远程仓库中下不到,只能自己在网上找,找到jar下载下来,放在托管资源库中,交给nexus统一管理。
-
proxy:代理仓库或代理资源库。
- 代理中央仓库、Apache下测试版本的jar包。
- 配置了外网的maven远程仓库地址的资源库,本地找不到,就会通过代理资源库中的地址,找到远程仓库,从远程仓库中下载所需要的jar,比如从阿里的仓库下载。
-
group:组仓库或组资源库。
- 使用时连接组仓库,包含Hosted(宿主仓库)和Proxy(代理仓库)
- 组资源库中并没有jar包
- 而是把代理资源库和托管资源库统一配置到组资源库中,然后组资源库作为一个唯一的public提供给所有人使用。
- 建议使用该方式,既可以下载私服jar包,也可以下载中央仓库或阿里等其他服务的,前提是需要将这些添加到该组中。
-
先创建一个宿主仓库,选择 maven2(hosted),如下
-
之后填写name,自定义但不要与其他名字冲突即可;Version policy选择release,否则通过web界面的upload环节无法显示该仓库,也就无法通过界面上传jar包了;Deployment policy选择 Allow redeploy,否则无法重新发布。如下
添加“maven2(proxy)”仓库
- 创建仓库时选择maven2(proxy)类型,填写name和url(http://10.0.1.189:8081/repository/alimaven/)即可,如下
### 创建“maven2(group)”仓库 - 创建仓库时选择maven2(group)类型,填写name和过滤条件即可
- 过滤条件为上面添加的两个库,添加顺序影响mvn依赖库下载时的搜索顺序,建议宿主库优先,其次是阿里库,如下
私服的库准备完成后开始通过maven使用
配置maven的setting.xml文件
- setting.xml 在maven的安装目录的conf目录下
- 配置“servers”标签,目的是标识使用的私服用户名密码和ID
- 配置“mirror”标签,目的是标识私服地址,如下
<?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">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>dilu-group</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>dilu-group</id>
<name>nexus public repositories</name>
<url>http://10.0.1.189:8081/repository/dilu-group/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<profiles></profiles>
</settings>
- 这里的ID配置成“dilu-group”,“alimaven”和“dilu-release”就都由该组库管理
- 假如在工程中执行 mvn package时,会依次从dilu-release、alimaven仓库中搜索依赖的jar包
上传jar包
- 不是一定需要上传的,只有那些从中央仓库中无法下载到的jar才建议上传托管的
- 无法从中央仓库下载的jar可以放到上面创建的宿主仓库中进行管理
选择宿主仓库进行上传
- 进入上传页面,选择对应的宿主仓库
- 进入仓库后添加jar包
- upload界面不显示组库,目前只显示release版本的素组仓库,所以只能看到我们刚才添加的dilu-release,本次也是上传到该库
- Group ID,可以自定义,主要影响的是代码中import时的路径,可以重复。
- Artifact ID,可以自定义,主要用于maven下载依赖时可以跟Group ID一起确唯一的jar包
- Version,jar包版本,版本只能是发布的版本,例如不能是1.27-SNAPSHOT版本,否则上传失败,nexus暂时不支持通过web界面上传非稳定版本的jar包,如果需要传非稳定版本可以通过maven命令行的方式,文章最后将详细介绍这种方式。
- 上传完jar包后可以通过如下界面查看
- 进入指定库,查看具体的jar信息
SNAPSHOT版本上传私服和使用
- dilu-release可以通过UI界面上传(见上文),但是snapshot版本的jar包无法传到release仓库中,所以才有了这部分讲解,通过添加snapshot仓库,上文已经加了,这里配置上即可。另外顺便也把dilu-release配置上,使用非UI界面也可以发布到该release仓库了。
- 基于上文继续讲解,目前已经添加了代理服务器alimave、dilu-release、dilu-snapshot
- 配置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">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>dilu-release</id>
<username>admin</username>
<password>Admin123</password>
</server>
<server>
<id>dilu-snapshot</id>
<username>admin</username>
<password>Admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>dilu-group</id>
<name>nexus public repositories</name>
<url>http://10.0.1.189:8081/repository/dilu-group/</url>
<!-- 匹配该镜像下所有的仓库。 此时pom中定义的仓库都不生效 -->
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<!-- id必须唯一 -->
<id>dilu-release</id>
<repositories>
<repository>
<!-- id必须唯一 -->
<id>dilu-release-1</id>
<!-- 仓库的url地址 -->
<url>http://10.0.1.189:8081/repository/dilu-release/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</profile>
<profile>
<!-- id必须唯一 -->
<id>dilu-snapshot</id>
<repositories>
<repository>
<!-- id必须唯一 -->
<id>dilu-snapshot-1</id>
<!-- 仓库的url地址 -->
<url>http://10.0.1.189:8081/repository/dilu-snapshot/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dilu-snapshot</activeProfile>
<activeProfile>dilu-release</activeProfile>
</activeProfiles>
</settings>
-
详细说明
- 配置文件中基于上文中的“dilu-group”,增加servers、profiles、activeProfiles标签的配置
- servers标签说明发布仓库的用户名和密码,使用mvn命令发布时要用到用户名和密码,该用户名和密码就是登陆nexus界面的用户名和密码
- profiles标签说明发布仓库的地址
- activeProfiles标签用于激活profiles标签中配置的仓库,否则profiles标签中配置的仓库不生效
- 说明
- dilu-group组仓库中包含了dilu-snapshot、dilu-release、alimaven(该仓库是代理阿里云的仓库,不支持发布到该仓库中,所以不需要配置这些标签–servers、profiles、activeProfiles)
- mvn package 编译下载依赖时,添加mirrors标签,配置dilu-group组即可,之后所有的依赖都会从这组里的所有仓库中获取
- 如果需要发布jar包到上述组中,则需要配置servers、profiles、activeProfiles标签,主要将非代理仓库dilu-snapshot、dilu-release对开发者开放
- 配置文件中基于上文中的“dilu-group”,增加servers、profiles、activeProfiles标签的配置
-
实战上传snapshot版本的jar包到dilu-snapshot仓库,以fastdfs为例
- 必须使用源代码编译,再发布。从github下载,git clone https://github.com/happyfish100/fastdfs-client-java.git
- 进入目录,编译jar包,本次生成了./target/fastdfs-client-java-1.29-SNAPSHOT.jar
- 使用mvn deploy:deploy-file 命令发布jar包,mvn执行必须和pom.xml在同级目录
- 注意-DrepositoryId使用的名称跟setting.xml配置文件里对应字段的关系,如果没有 -Durl和-DrepositoryId字段则默认发布到本地仓库中(~/.m2目录下)
mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-snapshot/ -DrepositoryId=dilu-snapshot --errors --debug
-
扩展:
- 当然上面的命令也可以用于发布jar包到release库
mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
- 复用当前pom.xml也可以发布其他不相关的jar包,例如
mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=mysql-connector-java -Dversion=5.1.39 -Dpackaging=jar -Dfile=/home/huangzg/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
- 当然上面的命令也可以用于发布jar包到release库
参考资料
- https://www.cnblogs.com/endv/p/11204704.html
- https://www.cnblogs.com/wbl001