nexus部署maven私服

生产环境,多数主机不可出外网,maven编译起来不太方便,随着生产环境主机数量增多,考虑需要配置一个专门的maven仓库,存储maven所需的依赖,所以就想到了nexus这个东西,特此记录!可以参考nexus官方文档

一、nexus简介

Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库。

e3d005486e9ac84357ea30a9f655c826

本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库是maven默认的远程仓库。

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

d9d29eeefddd4bc45fe85c283882a251

1.1 Nexus的功能:

1、节省外网带宽。大量对于外部仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以消除对外的重复构件下载,降低带宽的压力;

2、加速Maven构建。加速Maven构建。不停地连接请求外部仓库十分的耗时,Maven在执行构建的时候不停地检查远程仓库的数据。利用私服,Maven只检查局域网的数据,提高构建的速度;

3、部署第三方构件。部署第三方构件。当某个构件无法从任何一个外部远程仓库获得。建立私服之后,便可以将这些构件部署到私服,供内部的Maven项目使用。

4、提高稳定性,增强控制。提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当网络不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。私服缓存了大量构建,即使暂时没有网络,Maven也可以正常的运行;

5、降低中央仓库的负荷。降低中央仓库的负荷。使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力。

二、安装Nexus

2.1 环境准备

OS hostname IP role 是否可出网
CentOS 7.6 nexus 10.4.7.101 nexus服务端
CentOS 7.6 client 10.4.7.102 maven客户端

2.2 系统默认参数优化

$ cat > /etc/security/limits.conf << EOF
* - nofile 655360
* - memlock unlimited
* - stack 655360
* - nproc unlimited
EOF
$ cat > /etc/sysctl.conf << EOF
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
fs.file-max=655360
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.pid_max = 655360
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_max_orphans = 655360
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.route.gc_timeout = 100
# 禁止icmp重定向报文
net.ipv4.conf.all.accept_redirects = 0
# 禁止icmp源路由
net.ipv4.conf.all.accept_source_route = 0
net.core.somaxconn = 65535
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
vm.swappiness = 10
vm.overcommit_memory = 1
vm.max_map_count = 262144
EOF

2.3 安装java环境

下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件;

$ mkdir /usr/local/java/
$ tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/java/
$ vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
$ source /etc/profile
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.4 安装nexus

nexus的二进制包不好从官方下,如果你们有什么国内的下载地址,可以评论里分享下,我这里费尽周折下载了一个最新版本(2020-12-12日下载),提取链接:百度网盘( 提取码:ylpw )。

2.4.1 解压安装
$ wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.0-02-unix.tar.gz
# 官方下载链接(如已下载我网盘的包,可不执行wget,大概率下载不下来)
$ mkdir /data
$ tar zxvf nexus-3.29.0-02-unix.tar.gz -C /data/
$ cd /data
$ mv sonatype-work/ nexus-3.29.0-02/
$ ln -sf nexus-3.29.0-02/ nexus
2.4.2 修改监听地址及端口(可不做修改)
$ vim /data/nexus/etc/nexus-default.properties
application-port=8081
application-host=0.0.0.0
2.4.3 修改jvm参数、日志等存储路径
$ vim /data/nexus/bin/nexus.vmoptions
-Xms4096m # 最小可用内存
-Xmx4096m # 最大可用内存(建议与最小可用内存保持一致)
-XX:MaxDirectMemorySize=4096m
-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
-XX:LogFile=/data/nexus/sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=/data/nexus/sonatype-work/nexus3
-Dkaraf.log=/data/nexus/sonatype-work/nexus3/log
-Djava.io.tmpdir=/data/nexus/sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
-Djava.endorsed.dirs=lib/endorsed
# 将上面的路径都修改为绝对路径
2.4.4 启动nexus

注:root用户启动可能会有问题,所以需要创建nexus用户用于启动nexus服务!

$ useradd nexus
$ chown -R nexus /data
$ ln -sf /data/nexus/bin/nexus /usr/local/bin/
$ su -s /bin/bash -c "nexus run" nexus
# 前台启动nexus(可以看到日志信息,避免配置错误还在傻等着)
$ su -s /bin/bash -c "nexus start" nexus
# 后台启动nexus
$ ss -lnptu | grep 8081
# 等待片刻后,确认8081端口在监听(8081端口启动较慢,多点耐心)
tcp LISTEN 0 50 *:8081 *:* users:(("java",pid=7587,fd=788))

2.5 初始化nexus

访问nexus的web管理页,URL:http://nexus_ip:8081 ,如下:

20210309222825

查看admin密码

$ cat /data/nexus/sonatype-work/nexus3/admin.password
8d47dd29-9cbf-472e-806e-7dbde49bbe4f

20210309222915

更新密码

20210309223042

开启匿名用户访问

20210309223106

三、配置maven代理

3.1 查看默认仓库类型

2021-03-10_140256

从图中就可以看出默认的仓库类型分为三种(其实有四种,不过最后一种不一定会用到):

  • group(仓库组类型):又叫组仓库,用于方便开发人员,自己设定的仓库;
  • hosted(宿主类型):内部项目的发布仓库(内部开发人员发布上去存放的仓库);
  • proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径);
  • virtual(虚拟类型):虚拟仓库(这个基本上用不到);

3.2 开启release的重复发版权限

2021-03-10_140735
2021-03-10_141127

3.3 设置代理仓库(采用阿里云maven仓库)

2021-03-10_141342
2021-03-10_141407

阿里云仓库的URL: https://maven.aliyun.com/nexus/content/groups/public/

2021-03-10_141606

查看刚才配置的仓库的URL地址

2021-03-10_141958
2021-03-10_142006

3.4 修改客户端的maven主配置文件

$ vim /usr/local/maven/conf/settings.xml
………………………… #省略部分内容
167 <mirror>
168 <id>nexus-testconf</id>
169 <mirrorOf>*</mirrorOf>
170 <name>nexus testconf</name>
171 <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
<!-- 刚才配置nexus仓库的URL地址 -->
172 </mirror>
173 </mirrors>
………………………… #省略部分内容
196 <profiles>
<!-- 需要写在这个标签下面 -->
261 <id>testconf</id>
262
263 <repositories>
264 <repository>
265 <id>nexus</id>
266 <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
267 <releases>
268 <enable>true</enable>
269 </releases>
270 <snapshots>
271 <enable>true</enable>
272 </snapshots>
273 </repository>
274 </repositories>
275
276 <pluginRepositories>
277 <pluginRepository>
278 <id>nexus</id>
279 <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
280 <releases>
281 <enable>true</enable>
282 </releases>
283 <snapshots>
284 <enable>true</enable>
285 </snapshots>
286 </pluginRepository>
287 </pluginRepositories>
288 </profiles>
<!-- 需要写在这个标签上面 -->
298 <activeProfiles>
299 <activeProfile>testconf</activeProfile>
<!-- 这里的值一定要和上面profile的ID对应,才可以激活 -->
300 </activeProfiles>
301 </settings>
<!-- 需要写在这个标签上面 -->

3.5 客户端测试

$ rm -rf ~/.m2/
$ mvn archetype:generate -DgroupId=cn.ljz.ljzweb -DartifactId=lzjweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
# 构建项目,可以看到在构建的过程中使用的是nexus私服地址
$ cd lzjweb/
$ mvn package # 打包测试(产生target目录则表示正常)

nexus web页面查看

2021-03-10_144054

本次博文搭建的nexus仅仅是为了帮助内网主机可以正常使用maven,如果需要上传打包好的项目,可以参考:https://blog.51cto.com/14157628/2472382#h10

posted @   吕振江  阅读(1309)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示

目录导航