基于Docker搭建Maven私服
1.什么是Maven私服?
Maven私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果 私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
2.Maven私服的作用
- 节省外网带宽
- 加速Maven构建
- 部署第三方构件
- 提高稳定性,增强控制
- 降低中央仓库的负荷。
3.Maven私服的使用场景
- 缓存企业级内部使用的jar包
- 实现微服务接口rpc远程调用开发
4.基于Docker搭建Maven私服
4.1.下载nexus3镜像
docker pull sonatype/nexus3
4.2.将容器内部/var/nexus-data挂载到主机/root/nexus-data目录。
docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
4.3.查看正在运行的容器的日志
使用docker ps命令查看正在运行的容器,并使用docker attach 容器id命令查看正在运行的容器的日志
docker ps
docker attach 容器id
注意:docker attach [options]命令在使用Ctrl+C退出容器时,还会将容器停止运行,如果希望退出容器时不停止运行则需要加上–sig-proxy这个参数
docker attach --sig-proxy=false 容器id
4.4.关闭防火墙
systemctl disable firewalld
4.5.访问Maven私服主页
到这里说明Maven私服已经启动成功啦
4.6.查看Maven私服默认的账号密码
docker ps
docker exec -it 容器id bash
cat /nexus-data/admin.password
4.7.登录Maven私服(默认账号为admin)
4.8.设置新的密码
5.往Maven仓库上传Jar包
5.1.创建新用户
5.2.登录新用户的账号
5.3.创建Maven仓库
5.4.更改本地Maven中的settings.xml文件(添加用户账号配置)
<servers>
<server>
<id>honey</id>
<username>honey</username>
<password>honey</password>
</server>
</servers>
5.5.创建一个Maven项目
<groupId>com</groupId>
<artifactId>maven-project</artifactId>
<version>1.0-RELEASE</version>
<!--注意限定版本一定为RELEASE,因为上传的对应仓库的存储类型为RELEASE -->
<!--指定仓库地址 -->
<distributionManagement>
<repository>
<!--此名称要和.m2/settings.xml中设置的ID一致 -->
<id>honey</id>
<url>http://192.168.102.149:8081/repository/honey-release/</url>
</repository>
</distributionManagement>
5.6.发布Jar包
进入命令窗口,跳转至项目地址,使用mvn deploy命令进行发布
发布成功后前往Maven私服页面查看Jar包是否存在
5.7.更改版本号重新发布
现在可以看到Maven仓库中已经存在两个不同版本啦
6.从Maven仓库下载Jar包
6.1.另外创建一个项目
<groupId>com</groupId>
<artifactId>maven-project-download</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com</groupId>
<artifactId>maven-project</artifactId>
<version>2.0-RELEASE</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>honey</id>
<url>http://192.168.102.149:8081/repository/honey-release/</url>
</repository>
</repositories>
6.2.删除本地Jar包
把Maven坐标引入进来时,我们可以发现,本地Maven仓库中已经存在了该Jar包,为了测试是否可以下载Jar包,我们应该把本地Maven仓库中的Jar包删除,重新下载
删除Jar包后,项目已经找不到该Jar包了
6.3.下载Jar包
查看本地Maven仓库,Jar包已经成功下载啦
7.测试Jar包是否可以使用
7.1.在发布Jar包的Maven工程中创建一个类,然后重新发布
package com;
/**
* @ClassName Test
* @Description
* @Author honey-袁小康
* @Date 2021/1/27 23:38
* @Version 1.0
*/
public class Test {
public void test() {
System.out.println("调用方法");
}
}
7.2.在下载Jar包的Maven工程中创建一个类,实现调用
package com;
/**
* @ClassName CallTest
* @Description
* @Author honey-袁小康
* @Date 2021/1/28 0:09
* @Version 1.0
*/
public class CallTest {
public static void main(String[] args) {
Test test = new Test();
test.test();
}
}
7.3.运行CallTest类
注意:运行CallTest类后,发现控制台输出的中文是乱码的,遇到这个问题首先就可以考虑是不是发布Jar包的编码格式存在问题。
查看发布Jar包时的日志:Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
7.4.解决中文乱码的问题
在发布Jar包的Maven工程中,更改pom.xml文件(添加发布插件,并设置编译格式为UTF-8)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
7.5.重新发布Jar包
使用mvn clean deploy命令重新发布Jar包
mvn clean deploy
7.6.运行CallTest类进行测试调用
现在控制台输入的中文没有出现乱码的问题啦~~
Maven私服的搭建到此结束啦~~~
莫找借口失败,只找理由成功。