Docker部署Nexus
搜索Nexus3镜像:[root@localhost ~]# docker search nexus
拉取Nexus3镜像:[root@localhost ~]# docker pull sonatype/nexus3
启动Nexus3前查看虚拟机端口是否被占用:[root@localhost ~]# netstat -nultp
通过Docker Hub查看安装步骤
添加docker自启动服务,具体启动命令如下:
docker run -d -p 8081:8081 --restart=always --name nexus sonatype/nexus3
当然也可以通过挂载宿主机方式安装,按需在网上找一些路径。到此安装结束了,登录地址如下:
http://192.168.56.100:8081/
第一次登录需要输入admin密码:
命令行登录容器内部: [root@localhost ~]# docker exec -it af765874d009 /bin/bash
cat /nexus-data/admin.password 查看密码。登录之后修改一下密码即可。
配置
仓库-存储配置
导航至 Repository-->Blob Stores,配置对象存储。
default是系统自带默认的,要注意的是这两个存储都需要设置大小限制,否则很容易把硬盘撑爆。
仓库-清理策略
导航至 Repository-->Cleanup Policies,配置存储清理策略。
仓库-仓库配置
导航至 Repository-->Repositories,配置仓库。
仓库有三种类型,如下:
- proxy,代理仓库,也就是对外部仓库的代理,这个仓库是只读的,并且可以缓存。
- hosted,托管仓库,也就是所谓私库了,可以上传包到这个仓库。
- group,仓库组,这是一个容器,它可以包含多个proxy,hosted或其他group仓库,它的作用就是让开发人员引用的时候只要填一个URL,这也是只读的。
proxy如下:
hosted如下:
Release 正式版本的 jar 包, POM模块声明的version如果包含snapshot字样则发布到snapshots,否则发布到releases库。例如:<version>1.0.1</version>
Snapshot 测试版本 jar 包 ,POM模块声明的version如果包含snapshot字样则发布到snapshots,否则发布到releases库。例如:<version>0.0.1-SNAPSHOT</version>
group仓库如下:
Nexus Maven配置说明
<mirrors>
<!--
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
-->
<mirror>
<id>maven-public</id>
<!--<mirrorOf>*</mirrorOf>-->
<mirrorOf>central</mirrorOf>
<name>maven-public</name>
<url>http://192.168.56.100:8081/repository/maven-public/</url>
</mirror>
</mirrors>
Maven的mirrorOf配置
在 maven 的配置文件 setting.xml 中已经配置了 aliyun 仓库,配置如下:
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
默认是所有的请求都会转到阿里云下载,但是有些依赖包又不在 aliyun 仓库,其实开发在pom.xml 是指定了依赖包的仓库地址的,因为以上的配置将所有依赖包的下载都拦截,转到了阿里云,关键就在于 mirroOf
的配置。
以下是关于 mirrorOf
字段的配置
* = 表示拦截所有请求,使用该仓库
external:* = 表示本地仓库的中没有的依赖才会使用该仓库
central = 表示拦截去中央仓库的请求,使用该仓库
# setting.xml不做任何配置时就是使用的中央仓库,也就是maven官方仓库https://repo.maven.apache.org/maven2
*,!repo_id = 除repo_id这个依赖包外,其他依赖都是用该仓库
repo1,repo2 = 表示只有 repo1 和 repo2 的依赖包才会使用该仓库,会代替pom的配置
开发在 pom 中是配置了依赖包的指定仓库的,如下
<repository>
<id>getui-nexus</id>
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
</repository>
如果此时 getui-nexus 依赖包无法下载,报错 Cannot resolve com.gexin.platform:gexin-rp-sdk-http:4.1.1.4
,修改 maven 配置文件。
<!-- 在maven安装目录下的conf/setting.xml -->
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*,!getui-nexus</mirrorOf> <!-- 关注这条即可,与pom中的id对应 -->
</mirror>
此时再进行构建,下载 getui-nexus 依赖包则不会从阿里云仓库下载,会从项目的pom里面找仓库下载。
或者
<!-- 在maven安装目录下的conf/setting.xml -->
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf> <!-- 关注这条即可,与pom中的id对应 -->
</mirror>
Maven访问仓库顺序
本地仓库—>私服(profile)—>远程仓库(repository)—>镜像仓库(mirror)—>中央仓库(central)
简化一下范围,一共分为本地、私服、远程3中仓库类型,远程、镜像、中央仓库都属于时远程仓库优先级为 本地>私服>远程。
Demo提交仓库
利用Spring官网模板创建Springboot项目:
Springboot项目pom.xml文件如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.14-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xuhuan</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<uniqueVersion>false</uniqueVersion>
<id>maven-releases</id>
<name>maven-releases</name>
<url>http://192.168.56.100:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<uniqueVersion>false</uniqueVersion>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>http://192.168.56.100:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
最后清理,打包,发布到Nexus私服。