从零搭建Maven私有仓库
来吧,手把手搭建个maven仓库玩玩
若将过去抱的太紧,怎么能腾出手来拥抱现在。
前言
主要使用到的技术
linux
、docker
、sonatype nexus
、maven
一、nexus3介绍
世界上第一个也是唯一一个免费使用的通用工件存储库。
二、使用docker安装nexus3
1、下载
使用命令:
docker pull sonatype/nexus3
提示:可以去docker hub网站搜索对应的软件,然后确定自己安装什么。这样以后其他的docker命令就知道怎么写了
2、启动nexus3
编写启动脚本start.sh
docker rm -f nexus || true
docker run --name nexus \
-p 8081:8081 \
-v /docker/nexus/nexus-data:/nexus-data \
--restart=always \
-d sonatype/nexus3
参数说明:
--name nexus #启动该容器的名字,可以自己更改为自己想要的名字
-p 8081:8081 #端口映射,将本地8081端口映射为容器的8081端口,第一个8081可以改成自己想要放开的端口
-v /docker/nexus/nexus-data:/nexus-data # 将容器的/nexus-data地址 代理到 本地/docker/nexus/nexus-data文件夹下
--restart=always #在重启docker时,自动重启改容器。
-d sonatype/nexus3 #即为后台运行一直sonatype/nexus3
运行start.sh
然后看日志
docker logs -f nexus
如果你一直卡在启动的这一步,你不妨这样试一试:增大你的服务器配置,如果你原来为1核1G,那么你增大为2核4G以上在重新启动一下看看,可能有惊喜。
三、使用nexus3
浏览器访问http://192.168.21.132:8081/
点击右上角,登录一下账号,账号admin
,密码需要在/docker/nexus/nexus-data
下的admin.password
我是一共创建了自己的三个repository。注意一下name和type
以下是我自己的理解:
- proxy 代理仓库,主要是代理公共的远程仓库,比如ali的。
- group 仓库组,主要是将仓库汇总,将自己的仓库,远程的仓库汇总起来,然后对外提供一个地址。我感觉就类似f5一样, 后续使用方,在maven的配置文件要加的
- hosted 宿主仓库,理解为自己的仓库,主要用于公共的远程仓库没有的,或者自己的包。后续提供方,需要将jar推送到仓库的地址
1、创建proxy代理仓库
点击 create repository 。选择maven2(proxy) 然后输入仓库名称 和 代理的公共远程仓库地址即可
http://maven.aliyun.com/nexus/content/groups/public/
点击最下面保存
2、创建hosted 宿主仓库
点击 create repository 。选择maven2(hosted)
输入名称 更改控制是否允许构件的部署和更新
为Allow redeploy
点击最下面保存
3、创建group 仓库组
点击 create repository 。选择maven2(group) 输入名称,更改version pollcy
为Mixed
将自己的代理仓库和宿主仓库加进来,最好宿主仓库在上面。优先从宿主仓库找,找不到再去代理仓库找。
点击最下面保存
四、提供方
现在假设我公司有一个工具类,好多个微服务都在使用,我不想把工具类每个系统都拷贝一份,这样也不利于后期的升级或者扩展。那我就把工具类弄成jar,然后上传到私服nexus3
上。
1、修改maven配置文件
首先把本地maven
的settings.xml
文件更改一下。 添加一下私服的账号密码,id随便写,但是要和后面项目里的pom.xml
中保持一致
<server>
<id>gmaya</id>
<username>admin</username>
<password>123456</password>
</server>
这一个是项目拉取jar的时候所使用的地址,仓库组里面已经包含公共远程仓库和私有的宿主仓库了。
<mirror>
<id>gmaya</id>
<name>gmaya-public</name>
<url>http://192.168.21.132:8081/repository/gmaya-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2、修改pom.xml
每次更改以后版本号手动加一,http://192.168.21.132:8081/repository/gmaya-releases/ 这个地址一定要是咱们自己私服的宿主仓库,因为宿主仓库才是存放咱们自己jar的仓库。type
为hosted
。 id
和settings.xml
文件中的id保持一致
<?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>top.gmaya</groupId>
<artifactId>top.gmaya.base</artifactId>
<version>1.0.3</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<distributionManagement>
<repository>
<id>gmaya</id>
<name>gmaya-public</name>
<url>http://192.168.21.132:8081/repository/gmaya-releases/</url>
</repository>
</distributionManagement>
</project>
3、编写工具类
写一个工具类demo
package top.gmaya.utils;
import java.util.UUID;
/**
* 获取id工具类
* @author GMaya
* @dateTime 2022/4/8 20:48
*/
public class IdUtil {
/**
* 获取id
* @author GMaya
* @dateTime 2022/4/8 20:49
* @return java.lang.String
*/
public static String getId() {
return UUID.randomUUID().toString().replace("-", "");
}
}
4、打包上传到私服
可以直接利用工具的maven推送命令,点击idea项目左面maven,使用deploy命令,直接推送。 推送成功!
浏览器查看是否已经成功推送到私服nexus3上。
五、使用方
如果是同一个maven
,那么settings.xml
文件无需更改。 在项目pom.xml
加入上面jar的maven
坐标即可。其他的无需配置
<dependency>
<groupId>top.gmaya</groupId>
<artifactId>top.gmaya.base</artifactId>
<version>1.0.3</version>
</dependency>
总结
世上无难事只怕有心人,有问题解决问题,慢慢的就懂了。