Maven学习总结系列八:使用Nexus创建私服

本文介绍了如何使用Nexus创建Maven私有仓库以解决公司内部开发时无法连外网、带宽占用大及第三方构件管理困难的问题。详细讲解了Nexus的仓库类型、内置仓库、配置Maven从Nexus下载构件的方法以及镜像配置,旨在通过Nexus提升开发效率并统一构件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面的文章中,我们已经了解了Maven的核心概念,我们已经可以正常的使用Maven来构建项目了。

 

但使用中遇到问题:

1.在公司开发团队开发,有可能会遇到不能连外网的情况,使我们无法下载Maven构件

2.公司的开发团队比较大,下载的Maven构件也比较多,每人都需要连接外网的中央仓库去下载构件,外网带宽占用很大,下载速度很慢,影响工作效率。

3.一些第三方构件数量多,各项目使用比较杂,无法通过中央仓库下载,直接复制JAR包到项目上不好管理。

 

解决方案设想:

有没有可能在局域网内创建一个类似于Maven中央仓库的私有仓库,这个私有仓库将从Maven中央仓库或其它远程仓库下载的构件缓存起来,当用户需要时,先从私有仓库查,没有再由私有仓库向远程仓库找,下载到私有仓库。

同时允许用户上传自己的构件到私有仓库。

这样就解决了中央仓库负荷高,外网带宽占用高的问题,又可以统一使用Maven机制管理第三方构件。

 

目前有几个软件实现了上面的功能,它们是专门的Maven仓库管理软件(Maven私服):

1.Apache的Archiva

2.JFrog的Artifactory

3.Sonatype的Nexus

 

我们这章讲的是使用Nexus来构建Maven私服。

 

1.1 Nexus的仓库与仓库组

Nexus包含了各种类型的仓库概念,包括代理仓库(proxy)宿主仓库(hosted)仓库组(group)等。每一种仓库都提供了丰富实用的配置参数,用户根据需求定制。

 

代理仓库:主要是提供下载缓存构件和插件、如果只是从远程仓库下载构件和插件、那么代理仓库完全足够。

宿主仓库:主要用于存放项目部署的构件、或者第三方构件,用于提供下载。

仓库组:将相同策略的仓库聚合,并通过一致的地址提供服务。(因为项目有可能依赖的中央仓库的release插件和某个宿主仓库中release的插件,为了方便可以配置仓库组作为仓库,而不去单独配置两个仓库)。

 

仓库关系图:

远程仓库:指配置在代理仓库(proxy)的实际仓库(如:互联网上的中央仓库,JBOSS仓库,Alibaba仓库等)

 

从图上可以看到,Maven可以直接从宿主仓库(hosted)下载构件,也可以从代理仓库下载构件,而代理仓库会间接地从远程仓库下载并缓存构件。

仓库组的作用,它实际是将相同性质的仓库聚合起来,对向提供一个访问地址,统一管理这些仓库,它没有实际内容,当有请求时,它会转向其包含的宿主仓库或代理仓库获得实际构件的内容。

 

1.2 Nexus内置的仓库

下面是Nexus默认的仓库:

 

我们可以看到,它有四种类型的仓库:

代理仓库(proxy)宿主仓库(hosted)仓库组(group),虚拟(virtual)。

但由virtaulrepository是为maven1服务的,而我们已使用maven2/3,所以不再介绍它。

 

对于4种类型的仓库,Maven内置了一些仓库,这些仓库用户可以不用在配置了。此外仓库还有一个属性Policy(策略),表示仓库为发布(Release)版本还是快照(Snapshot)版本仓库。Release的仓库只保存发布版本,而Snapshot仓库只保存快照版本。

 

下面介绍一下Nexus默认的仓库:

Central:        代理中央仓库、策略为Release、只会下载和缓存中央仓库中的发布版本构件。

Release:        策略为Release的宿主仓库、用来部署组织内部的发布版本内容。

Snapshot:      策略为Snapshot的宿主仓库、用来部署组织内部的快照版本内容。

3rdparty:    策略为Release的宿主仓库类型、用来部署无法从公共仓库获取的第三方发布版本构件、如oracle连接驱动jar包。

ApacheSnapshot:     策略为Snapshot的代理仓库、用来代理ApacheMaven仓库的快照版本构件。

Public Repositories:该仓库将上述三个hosted类型的仓库和central仓库聚合并通过该URL对外提供服务。

 

 

1.5 配置Maven从Nexus下载构件

远程仓库对本项目有效:在项目的POM.XML中配置远程仓库

大家还记录前章节在pom.xml中配置一个JBOSS的Maven仓库了吗?

--------------------------------------------------------------------------------------------

<repositories>

<repository>

<id>jboss</id>

<name>JBossRepository</name>

<url>http://repository.jboss.com/maven2/</url>

<releases>

<updatePolicy>daily</updatePolicy><!--never,always,interval n -->

<enabled>true</enabled>

<checksumPolicy>warn</checksumPolicy><!--fail,ignore -->

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>

<layout>default</layout>

</repository>

</repositories>

--------------------------------------------------------------------------------------------

 

我们把public repositories仓库组的地址作为私服的访问地址:

对于本地仓库来说,其实“私服”就是一个远程仓库,配置的方式是跟其它远程仓库是一样的。


--------------------------------------------------------------------------------------------

<repositories>

<repository>

<id>nexus</id>

<name>Nexus Repository</name>

<url>http://192.168.10.100:8080/nexus2/content/groups/public/</url>

<layout>default</layout>

<snapshots>

<enabled>true</enabled>

</snapshots>

<releases>

<enabled>true</enabled>

</releases>

</repository>

</repositories>

<pluginRepositories>

<pluginRepository>

<id>nexus</id>

<name>Nexus Repository</name>

<url>http://192.168.10.100:8080/nexus2/content/groups/public/</url>

<layout>default</layout>

<snapshots>

<enabled>true</enabled>

</snapshots>

<releases>

<enabled>true</enabled>

</releases>

</pluginRepository>

</pluginRepositories>

--------------------------------------------------------------------------------------------

 

 

远程仓库对所有Maven项目有效:在settings.xml的profile元素中配置

配置中使用一个ID为nexus的profile,在profile中配置了相关的仓库信息,同时配置中又使用activeProfile元素将这个profile激活,这样当执行Maven构建时,激活的profile会将仓库配置应用到项目中去。

-------------------------------------------------------------------------------------------

<settings>
 ...
  <profiles>  

    <profile>

      <id>nexus</id>

       <repositories>

        <repository>

          <id>nexus</id>

          <name>NexusRepository</name>

         <url>http://192.168.10.100:8080/nexus2/content/groups/public</url>

         <layout>default</layout>

          <snapshots>

           <enabled>true</enabled>

         

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值