Maven 私服 Nexus 简单使用

Maven 私服 Nexus 简单使用

简介

Nexus 是一个仓库管理工具,主要用于存储和管理二进制构件(如 JAR 文件)。它支持多种类型的仓库格式,包括 Maven、npm、NuGet 等。

Nexus 主要用于以下几个方面:

  • 存储内部构件:存储公司内部开发的库和应用程序。
  • 缓存外部依赖:缓存从公共仓库(如 Maven Central)下载的依赖项,减少对外部网络的依赖,提高构建速度。
  • 集中化管理:提供一个集中的平台来管理所有依赖项,确保版本一致性和安全性。

Nexus 的主要功能

  1. 仓库类型: Nexus 支持多种类型的仓库:
  • Hosted Repository(托管仓库):用于存储内部开发的构件或第三方构件。可以是发布版本(releases)或快照版本(snapshots)。
  • Proxy Repository(代理仓库):作为公共仓库(如 Maven Central)的代理,缓存远程仓库中的构件,减少对外部网络的依赖。
  • Group Repository(组仓库):将多个仓库组合在一起,方便客户端通过一个 URL 访问多个仓库。
  1. 权限管理: Nexus 提供了细粒度的权限管理功能,允许管理员为不同的用户和角色分配不同的权限。例如,某些用户可能只能读取仓库中的构件,而其他用户则可以上传和删除构件。
  2. 搜索和浏览:
    Nexus 提供了一个易于使用的 Web 界面,允许用户浏览和搜索仓库中的构件。这有助于快速找到所需的依赖项,并进行版本管理。
  3. 安全和审计:
    Nexus 支持 SSL 加密、LDAP 集成、OAuth 和 SSO 等多种安全机制,确保仓库的安全性。此外,Nexus 还提供了详细的日志记录和审计功能,帮助管理员跟踪用户的操作。
  4. CI/CD 集成
    Nexus 可以与 Jenkins、GitLab CI、CircleCI 等持续集成/持续交付(CI/CD)工具无缝集成,支持自动化构建和部署流程。

安装

nexus 是 Java 开发,需要先安装 jdk 或 jre 才能运行.

相关版本:

  • 系统: Ubuntu 24.04 server
  • JDK: 11.0.26
  • Nexus: 3.72.0-04

安装JDK

shell 复制代码
# 下载jdk
wget https://download.oracle.com/otn/java/jdk/11.0.26+7/720377fa814b4b4491dea5837af261de/jdk-11.0.26_linux-x64_bin.tar.gz
# 将 jdk-11.0.26_linux-x64_bin.tar.gz 解压到/opt/java11目录
sudo mkdir /opt/java11
sudo tar -zxvf jdk-11.0.26_linux-x64_bin.tar.gz -C /opt/java11 --strip-components=1
# 配置 JDK 的环境变量
sudo tee /etc/profile.d/java.sh <<-'EOF'
JAVA_HOME=/opt/java8
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
EOF
# 刷新环境变量
source /etc/profile.d/java.sh

安装 Nexus

shell 复制代码
# 下载Nexus的最新版本
wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
# 创建一个目录来存放Nexus
sudo mkdir /opt/nexus
# 解压下载的tar.gz文件
sudo tar -zxvf latest-unix.tar.gz -C /opt/nexus --strip-components=1
# 创建一个nexus用户
sudo useradd nexus
# 给nexus目录权限
sudo chown -R nexus:nexus /opt/nexus
# 为nexus用户配置权限
sudo chmod -R 755 /opt/nexus

注意: 要更改 nexus 的工作目录的位置

shell 复制代码
# 调整工作目录
# vim /opt/nexus/bin/nexus.vmoptions
-Xms2703m
-Xmx2703m
-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
# -XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:LogFile=./sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
# -Dkaraf.data=../sonatype-work/nexus3
-Dkaraf.data=./sonatype-work/nexus3
# -Dkaraf.log=../sonatype-work/nexus3/log
-Dkaraf.log=./sonatype-work/nexus3/log
# -Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Djava.io.tmpdir=./sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
-Djdk.tls.ephemeralDHKeySize=2048
#
# additional vmoptions needed for Java9+
#
--add-reads=java.xml=java.logging
--add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED
--patch-module
java.base=./lib/endorsed/org.apache.karaf.specs.locator-4.3.9.jar
--patch-module
java.xml=./lib/endorsed/org.apache.karaf.specs.java.xml-4.3.9.jar
--add-opens
java.base/java.security=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.util=ALL-UNNAMED
--add-opens
java.naming/javax.naming.spi=ALL-UNNAMED
--add-opens
java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED
--add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED
--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED
--add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
--add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED
--add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
--add-exports=java.security.sasl/com.sun.security.sasl=ALL-UNNAMED

创建服务文件,以服务的形式运行

ini 复制代码
# 创建nexus服务文件
# sudo vi /etc/systemd/system/nexus.service
[Unit]
Description=Nexus Repository Manager
After=network.target
 
[Service]
Type=forking
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
LimitNOFILE=65536
TimeoutStartSec=30
 
[Install]
WantedBy=multi-user.target

Nexus 服务的启动\状态\停止\重启

shell 复制代码
# 重新加载systemd服务
sudo systemctl daemon-reload
# 启动Nexus服务
sudo systemctl start nexus
# 设置Nexus开机自启
sudo systemctl enable nexus
# 检查Nexus服务状态
sudo systemctl status nexus
# 重启Nexus服务
sudo systemctl restart nexus

开始访问

访问管理地址: http://{hostIp}:8081

默认的用户密码:

  • 用户:admin
  • 密码:/opt/nexus/sonatype-work/nexus3/admin.password

Maven 使用 Nexus 私服上传\下载

  1. 在 Nexus 中创建仓库: 注意Version policy 和 Deployment policy 的配置
  2. 在 Maven 的 settings.xml 中配置 server 和 mirror
  3. 在项目中使用私服上传和下载

部分关键配置项:

xml 复制代码
<!-- settings.xml 中的关键配置 -->
<!-- server 部分 -->
<server>
  <id>nexus-all</id>
  <username>******</username>
  <password>******</password>
</server>
<server>
  <id>maven-releases-joe</id>
  <username>******</username>
  <password>******</password>
</server>
<server>
  <id>maven-snapshots-joe</id>
  <username>******</username>
  <password>******</password>
</server>
<!-- mirror 部分 -->
<mirror>
  <id>nexus-all</id>
  <mirrorOf>*</mirrorOf>
  <url>http://10.18.18.168:8081/repository/maven-public/</url>
  <name>Nexus All Repositories Mirror</name>
</mirror>
<mirror>
  <id>maven-releases-joe</id>
  <mirrorOf>*</mirrorOf>
  <url>http://10.18.18.168:8081/repository/maven-releases-joe/</url>
  <name>maven-releases-joe</name>
</mirror>
<mirror>
  <id>maven-snapshots-joe</id>
  <mirrorOf>*</mirrorOf>
  <url>http://10.18.18.168:8081/repository/maven-snapshots-joe/</url>
  <name>maven-snapshots-joe</name>
</mirror>
xml 复制代码
<!-- pom.xml 中的关键配置 -->
<!-- 上传, mvn clean deploy -->
<distributionManagement>
  <repository>
    <id>maven-releases-joe</id>
    <url>http://10.18.18.168:8081/repository/maven-releases-joe/</url>
  </repository>
  <snapshotRepository>
    <id>maven-snapshots-joe</id>
    <url>http://10.18.18.168:8081/repository/maven-snapshots-joe/</url>
  </snapshotRepository>
</distributionManagement>

<!-- 下载 -->
<repositories>
  <repository>
    <id>nexus-all</id>
    <url>http://10.18.18.168:8081/repository/maven-public/</url>
  </repository>
  <repository>
    <id>maven-releases-joe</id>
    <url>http://10.18.18.168:8081/repository/maven-releases-joe/</url>
  </repository>
  <repository>
    <id>maven-snapshots-joe</id>
    <url>http://10.18.18.168:8081/repository/maven-snapshots-joe/</url>
  </repository>
</repositories>

附录

shell 复制代码
# 启动脚本测试
mkdir /home/nexus
# 给nexus目录权限
sudo chown -R nexus:nexus /home/nexus
# 为nexus用户配置权限
sudo chmod -R 755 /home/nexus
# 有时问题可能出在启动脚本本身。您可以手动尝试启动 Nexus 以获取更详细的输出:
sudo su - nexus -c '/opt/nexus/bin/nexus start'
# 或者直接运行 Nexus 以便实时查看输出
sudo su - nexus -c '/opt/nexus/bin/nexus run'

如果私服中不存在相关依赖可以手动上传:

shell 复制代码
# 手动上传的方式之一: 在项目的根目录执行, 指定依赖所在的位置\仓库的地址.
# 注意: maven 本地仓库的依赖是不能直接上传的,需要移除本地仓库,再上传
mvn deploy:deploy-file -Durl="http://10.18.18.168:8081/repository/maven-releases-joe/" -DrepositoryId="maven-releases-joe" -Dfile="C:/Users/windows/Downloads/csp/casp-3.0.1.jar" -DpomFile="C:/Users/windows/Downloads/csp/casp-3.0.1.pom" -DgroupId="com.ultrapower" -DartifactId="casp" -Dversion="3.0.1" -Dpackaging="jar"

参考文献

nexus 官网

相关推荐
郑州吴彦祖7727 分钟前
《深入解析Java synchronized死锁:从可重入锁到哲学家就餐问题》
java·线程·synchronized
Seven9710 分钟前
【设计模式】命令模式助力快速添加新命令而不影响现有代码
java·后端·设计模式
计算机-秋大田12 分钟前
基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)
java·vue.js·spring boot·后端·课程设计
好多大米17 分钟前
2.JVM-通俗易懂理解类加载过程
java·jvm·spring·spring cloud·tomcat·maven·intellij-idea
青云交19 分钟前
Java 大视界 -- 基于 Java 的大数据分布式数据库架构设计与实践(125)
java·大数据·分布式·分布式数据库·架构设计·数据处理·高可用性
跪在镜子前喊帅20 分钟前
【面试】JVM
java·面试
茂茂在长安25 分钟前
JAVA面试_进阶部分_java中四种引用类型(对象的强、软、弱和虚引用)
java·jvm·面试
程序员鱼皮27 分钟前
带大家做了个 AI 项目,没想到这么简单!
java·程序员·ai 编程
北京_宏哥37 分钟前
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
java·selenium·前端工程化