当前位置: 首页 > article >正文

使用Nexus3搭建Maven私有镜像仓库

目录

一、Nexus和Maven的关系

二、Nexus部署和配置

1、Nexus部署

2、Nexus配置

三、Maven配置

1、全局setting.xml配置

2、项目pom.xml配置

3、常用Maven命令

四、问题处理


一、Nexus和Maven的关系

Maven‌是一个项目管理工具,主要用于构件管理和依赖管理。Maven通过仓库来统一管理各种构件,仓库分为本地仓库和远程仓库。本地仓库是用户在settings.xml中配置的本地仓库地址,而远程仓库则包括中央仓库和其他外部仓库。Maven在处理依赖时,会首先查看本地仓库,如果本地仓库中没有所需的构件,则会去远程仓库查找并下载到本地仓库中‌。

Nexus‌是一个强大的Maven仓库管理器,通常被称为Maven的私服。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这种方式不仅节省带宽和时间,还能降低中央仓库的负荷‌。

二、Nexus部署和配置

1、Nexus部署

#拉取镜像
docker pull sonatype/nexus3

#持久化目录
mkdir -p /data/nexus/data
chmod 777 -R /data/nexus/data

#启动服务
docker run -d --name nexus3 -p 8081:8081 --restart always -v /data/nexus/data:/nexus-data sonatype/nexus3

#查看日志
docker logs -f nexus3

打开浏览器,访问 http://ip:8081/

查看admin账户登录密码

cat /data/nexus/data/admin.password

2、Nexus配置

3.1、存储管理

在创建仓库之前,需要先指定存储目录,便于统一管理,就需要创建Blob Store,不创建则使用default存储目录。本文使用default存储目录。

3.2、Nexus仓库说明

默认仓库说明

  • maven-central:中央仓库,用于从公共的开源库下载
  • maven-releases:发布仓库,用于保存开发的稳定发行版本‌
  • maven-snapshots:快照仓库,用于保存开发过程中的不稳定版本
  • maven-public:组合仓库,组合多个仓库对外提供服务
  • maven-thirdparty:第三方仓库,用于存放不能从中央仓库获取的或者不开源的

3.3、修改中央仓库

由于网络限制,需要将默认的中央仓库地址改为国内的中央仓库地址。

默认的中央仓库地址:https://repo1.maven.org/maven2/

修改为

阿里云的中央仓库地址:https://maven.aliyun.com/repository/public/

3.4、修改发布仓库

Nexus中发布仓库默认的“Deployment Policy”配置是“Disable Redeploy”,因此无法发布项目。要发布项目,需要设置为“Allow Redeploy”。

3.5、创建第三方仓库

第三方仓库是用于存放不能从公共中央仓库获取的或者不开源的库,这个通常是由内部人员自行下载之后发布上去。

Hosted有三种方式:Releases、Snapshot、Mixed

  • Releases: 稳定发行版本‌
  • Snapshot: 未发布的不稳定版本
  • Mixed:混合的

Deployment设置选项有三个值:

  • Allow redeploy:允许同一个版本号下重复提交代码,nexus以时间区分
  • Disable redeploy:不允许同一个版本号下重复提交代码
  • Read-Only:不允许提交任何版本

原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。

可通过页面上传第三方jar包

3.6、修改组合仓库

设置组成员,组成员仓库的顺序很重要,因为Nexus会按照仓库在列表中的顺序来解析依赖项。通常,加入group资源库的顺序应是:hosted仓库 > 国内proxy仓库 > 国外proxy仓库,这样做可以提高依赖项的下载速度

三、Maven配置

settings.xml和pom.xml是Maven中两个非常重要的配置文件。

  • settings.xml文件通常位于Maven安装目录的conf目录下,配置Maven的行为,如本地仓库地址、远程仓库地址等。它是Maven的全局配置,适用于所有项目
  • pom.xml文件位于每个项目中,包含了项目的配置信息,如项目依赖、插件配置、项目信息等。它是项目级别的配置

在Maven中,settings.xml和pom.xml的优先级如下: 

  • pom.xml > settings.xml:即项目级别的配置pom.xml优先于全局级别的配置settings.xml。如果在pom.xml中配置了某个设置,那么它会覆盖settings.xml中相应的配置。
  • 在实际使用中,通常只需要修改settings.xml文件来配置一些全局性的设置,而pom.xml中的配置更多关注于项目本身。

1、全局setting.xml配置

<!-- 本地仓库路径 -->
<localRepository>D:\ProgramData\Maven\repository</localRepository>

<!-- nexus服务器 -->
<servers>  
	<server>  
		<id>public</id>  
		<username>admin</username>  
		<password>admin123</password>  
	</server>
    <server>  
        <id>snapshots</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>
    <server>  
        <id>releases</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>
</servers>

<!-- 镜像仓库配置 -->  
<mirrors>     
	<mirror>  
		<id>public</id>  
		<name>public</name>  
		<url>http://127.0.0.1:8081/repository/maven-public/</url>  
		<mirrorOf>central</mirrorOf>  
	</mirror>     
</mirrors>

镜像仓库mirrors配置

  • <id>:此镜像的唯一标识符,可以是任何字符串,用于区分不同的镜像。
  • <name>:是用来指定镜像的名称的。这个名称通常是一个描述性的字符串。
  • <url>:镜像仓库的基本URL
  • <mirrorOf>:指定了该镜像适用于哪个 Maven 仓库。

settings.xml不做任何配置时是有默认的仓库的,这个仓库就是central仓库,URL地址是:https://repo.maven.apache.org/maven2/。在这个示例中,mirrorOf 设置为central,表示这个镜像仅适用于中央仓库。配置镜像仓库的目的是为了提高依赖库的下载速度。

如果<mirrorOf>被设置为 *,表示这个镜像对所有 Maven 仓库都生效,即所有的 Maven 仓库都会使用这个镜像。这在某些情况下可能是有用的,特别是在没有直接访问外网的情况下使用本地或内部镜像。 

2、项目pom.xml配置

<!--构件发布信息,在执行mvn deploy后表示要发布的位置。 -->
<distributionManagement>
	<!--构件的稳定版部署位置 -->
	<repository>
		<!-- id和settings.xml中server的id保持一致 -->
		<id>releases</id>
		<url>http://127.0.0.1:8081/repository/maven-releases/</url>
	</repository>
	
	<!-- 构件的快照版部署位置 -->
	<snapshotRepository>
		<!-- id和settings.xml中server的id保持一致 -->
		<id>snapshots</id>
		<url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
	</snapshotRepository>
</distributionManagement>

3、常用Maven命令

# 上传命令,优先可通过网页上传
mvn deploy:deploy-file 
-DrepositoryId=releases 
-Durl=http://127.0.0.1:8081/repository/maven-releases/ 
-Dfile=D:\configuration-1.1.0.jar 
-Dsources=D:\configuration-1.1.0-sources.jar 
-DgroupId=com.cnstar.common -DartifactId=cnstar-configuration -Dversion=1.1.0 -Dpackaging=jar 
-DpomFile=D:\pom.xml

# 上传源代码命令
mvn deploy:deploy-file 
-DrepositoryId=releases 
-Durl=http://127.0.0.1:8081/repository/maven-releases/
-Dfile=D:\storage-service-1.1.0-sources.jar 
-Dclassifier=sources -DgroupId=com.cnstar.common -DartifactId=cnstar-storage-service -Dversion=1.1.0 -Dpackaging=jar 

# 删除的话可直接到nexus上直接删除

# 远程库下载命令
mvn dependency:get 
-DremoteRepositories=https://mvnrepository.com/artifact/org.influxdb/influxdb-java 
-DgroupId=org.influxdb -DartifactId=influxdb-java -Dversion=2.17

# 中央库下载命令
mvn dependency:get 
-DgroupId=org.springframework.boot -DartifactId=spring-boot-devtools -Dversion=2.1.4.RELEASE

# 下载源码包
mvn dependency:get 
-Dclassifier=sources 
-DgroupId=com.cnstar.common -DartifactId=cnstar-storage-service -Dversion=1.1.0 

四、问题处理

1、阿里云中央仓库无法远程自动下载构件到仓库,nexus.log日志内容如下:

admin org.sonatype.nexus.repository.httpclient.internal.HttpClientCustomConfigFacetImpl - Remote connection status of repository maven-central set to Remote Manually Blocked.

解决方法:

a)排查是否勾选了远程仓库被手动阻止,如果是的话取消勾选


http://www.kler.cn/a/429640.html

相关文章:

  • RNN之:LSTM 长短期记忆模型-结构-理论详解-及实战(Matlab向)
  • 我国无人机新增实名登记110.3 万架,累计完成飞行2666万小时
  • Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息
  • EasyCVR视频汇聚平台如何配置webrtc播放地址?
  • SpringBoot整合Easy-es
  • hive迁移后修复分区慢,怎么办?
  • Burp(8)-验证码爆破插件
  • 基于FPGA的PI环调节电压
  • Xcode编译的时候运行python脚本
  • 计算机网络——三大交换技术
  • 准确率99.9%的离线IP地址定位库 ip2region - python 示例
  • GauHuman阅读笔记【3D Human Modelling】
  • 知从科技闪耀汽车智能底盘大会:共探软件安全新篇章
  • ElasticSearch常见面试题汇总
  • 《maven 常用知识详解 3:聚合与继承》
  • Blender均匀放缩模型
  • 第8章:CSS预处理器 --[CSS零基础入门]
  • vue3 实现音频转文字组件
  • 深入理解 React 状态管理:useState 和 useReducer
  • java工具包介绍
  • FCOS: Fully Convolutional One-Stage Object Detection——全卷积一阶段目标检测
  • 【CMD、PowerShell和Bash设置代理】
  • 项目文章 | RNA-seq+WES-seq+机器学习,揭示DNAH5是结直肠癌的预后标志物
  • C++小小复习一下
  • js:事件监听
  • STM32进阶 ADC模式转换