利用 docker-compose 在 docker 下部署 Maven 私服 Nexus
前言
先上项目源代码 liumapp/nexus-in-docker 和用于测试发布的 liumapp/convert-html-to-pdf
nexus-in-docker 项目用于在系统的 Docker 上部署 Nexus3,convert-html-to-pdf 用于测试发布到该 Nexus 私服上。
Nexus 安装运行
使用命令
docker-compose up -d
会自动去 docker hub 拉取 Nexus:3.12.1 版本的镜像并生成容器运行。
不过因为设置了 volumes 与容器内的/nexus-data 目录建立关联,所以在运行之前,需要确保 nexus-in-docker 的根目录具备写权限。
运行成功后(不会有提示信息,可以使用 docker logs -t -f --tail 100 nexus
来查看启动日志),在浏览器内访问 http://localhost:8081 便可以打开 Nexus 的管理 web 页面。
初始的管理员帐号密码为 admin/admin123。
Deploy 项目
创建 Repository
使用 admin 登陆后,我们可以在设置一栏里创建一个 Repository,需要注意的地方只有三个:
-
Recipe 要选择 Maven2(hosted)。
可能有小伙伴会问,为什么不是 Maven2(group)或者 Maven2(proxy)呢?
首先要搞清楚 proxy,hosted,group 三者的关系:-
proxy
远程仓库的代理,比如说nexus
配置了一个central repository
的proxy
,当用户向这个proxy
请求一个artifact
的时候,会现在本地查找,如果找不到,则会从远程仓库下载,然后返回给用户。 -
hosted
宿主仓库,用户可以把自己的一些仓库deploy
到这个仓库中 -
group
仓库组,是 nexus 特有的概念,目的是将多个仓库整合,对用户暴露统一的地址,这样就不需要配置多个仓库地址。
所以我们的项目是要发布到本地的 Nexus 私服,自然就要选择 hosted。
-
-
Version policy 要选择 Mixed
因为我们的 Maven 项目在打版本的时候,有时候是 Release 版本,有时候就是一个 v1.0.0 版本,像我就喜欢用后者,选择 Mixed 可以让私服支持不同类型的项目版本,如果您选择的是 Release 或者 Snapshot,那么 deploy 过来的项目就必须是这两种类型的版本,不然就会报错。
-
Deployment policy 要选择 Allow redeploy
一个项目总不可能不更新迭代了吧,除非已经放弃治疗删库跑路了。
添加 Nexus 用户
添加一个 Nexus 用户,用于后面的 Deploy,只需要注意两点:
-
User 的 ID 将会在后面的 Maven 配置项中作为 username 来使用,所以很多情况都会发现 id 跟 username 相同的情况。
-
User 的 status 请注意设置为 active,虽然这是一个显而易见的事情,但还是会存在很多粗心大意的情况。
本地 Deploy
接下来轮到我们的另一个测试项目 liumapp/convert-html-to-pdf 上场。
首先修改本地 maven 的配置文件 settings.xml,把新添加的 maven 私服用户写入 server 下。
<servers>
<server>
<id>liumapp</id>
<username>liumapp</username>
<password>liumapp</password>
</server>
</servers>
在要发布到该私服下的 maven 项目中,添加:
<distributionManagement>
<repository>
<id>liumapp</id>
<url>http://127.0.0.1:8081/repository/liumapp/</url>
</repository>
</distributionManagement>
这里 repository/liumapp 的 liumapp 代表您刚刚创建的 repository 名称,并不是用户名。
然后在 build 下添加以下插件
<!--发布代码Jar插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
</plugin>
<!--发布源码插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
最后在 console 下输入命令
mvn deploy
具体的配置可以直接在 convert-html-to-pdf 下查看 pom.xml 文件。
如果您要发布的是一个 Jar 包,那么直接使用命令:
mvn deploy:deploy-file -DgroupId=com.aspose.words -DartifactId=aspose-words -Dversion=15.8.0 -Dpackaging=jar -Dfile=./aspose-words-15.8.0-jdk16.jar -Durl=http://127.0.0.1:8081/repository/liumapp/ -DrepositoryId=liumapp
即可。
使用私服
在要从该私服下载依赖的项目中,配置 pom.xml 文件:
<repositories>
<repository>
<id>test</id>
<url>http://127.0.0.1:8081/repository/liumapp/</url>
</repository>
</repositories>
即可
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于