微服务实践(三)Maven私服搭建
文章目录
什么是Maven私服
Maven私服就是私人仓库的意思,一般在本地电脑会有本地的仓库,但是在微服务架构中协同进行开发的时候,因为都是在本地仓库的安装包,所以会存在依赖找不到的问题,这个时候就需要部署到服务器上,形成一个公司内网的仓库。
Maven私服的主要功能包括:
- 提高构建效率和稳定性:私服能够缓存和共享依赖库,减少依赖的下载和更新时间,提高构建效率和稳定性。
- 管理依赖库:私服能够管理本地和第三方的依赖库,通过版本控制、依赖合并、依赖查找等功能,实现依赖的统一管理和控制。
- 管理构建产物:私服能够存储和发布构建产物,通过版本控制、构建流水线等功能,实现构建的可追溯性和可管理性。
- 支持组织内部开源项目:私服能够存储和发布组织内部的开源项目,通过权限控制和版本控制等功能,实现开源项目的共享和管理。
- 支持自定义插件和配置:私服能够支持自定义Maven插件和配置,通过插件管理、配置管理等功能,实现Maven构建的灵活性和定制化。
关于Nexus
Nexus是一个流行的Maven私服,它是由Sonatype开发的一款开源软件。Nexus提供了一系列功能,包括Maven仓库管理、部署和下载,以及对多种其他软件包管理工具的支持,如Docker、npm、RubyGems等。
下载与安装
Nexus的官网 :http://www.sonatype.com/
也可以到这个地址下载:http://pan.baidu.com/s/1pKFEzv9
下载Nexus Repository Manager OSS 2.xx。
解压安装后进入bin目录下,点击console-nexus.bat启动Nexus后,在浏览器中输入:http://localhost:8081/nexus

可以点击右上角的登录,默认账号密码为:admin,admin123
Nexus使用

Repository
- 3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
- Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
- Central: 用来代理maven中央仓库中发布版本构件的仓库
- Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
- Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
- Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
Type
- proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。
- Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里,一般设置为快照版本(Snapshots)跟生产版本(Releases)。
- virtual:也是中央仓库镜像,支持M1老版本。
- Group:仓库组,目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了,右边那个Repository Path可以点击进去,看到仓库中artifact列表。
Maven配置Nexus
settings.xml文件配置
settings.xml文件中负责定义一些公用的配置属性、下载地址及匹配规则。
配置server
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
这里的server.id是自己定义的,指定这个id的用户名和密码,前提要跟distributionManagement标签中的repository的id保持一致。
配置镜像
镜像通常会和 Maven 私服配合使用,由于 Maven 私服可以代理所有外部的公共仓库(包括中央仓库),因此对于组织内部的用户来说,使用一个私服就相当于使用了所有需要的外部仓库,这样就可以将配置集中到私服中,简化 Maven 本身的配置。这种情况下,用户所有所需的构件都可以从私服中获取,此时私服就是所有仓库的镜像。
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.202:8081/nexus/content/groups/public/</url>
</mirror>
以上配置中,mirrorOf 元素的取值为 * ,表示匹配所有远程仓库,所有对于远程仓库的请求都会被拦截,并跳转到 url 元素指定的地址。
配置repository(仓库)
<profile>
<id>nexusmaven</id>
<repositories>
<!--包含需要连接到远程仓库的信息 -->
<repository>
<!--仓库 id,repositories 可以配置多个仓库,保证 id 不重复-->
<id>nexus-maven</id>
<!--仓库地址,即 nexus 仓库组的地址-->
<url>http://192.168.1.202:8081/nexus/content/groups/public/</url>
<!--下载 releases 构件配置-->
<releases>
<enabled>true</enabled>
<!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳进行更新-->
<updatePolicy>always</updatePolicy>
</releases>
<!--下载 snapshots构件配置-->
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<!-- 插件仓库,maven 的运行依赖插件,也需要从私服下载插件 -->
<pluginRepositories>
<pluginRepository>
<id>nexus-maven</id>
<url>http://192.168.1.202:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
激活profile
<activeProfiles>
<activeProfile>nexusmaven</activeProfile>
</activeProfiles>
pom.xml文件配置
distributionManagement标签主要负责Maven的构件发布,添加此配置的项目deploy会加载并进行上传。
<!-- maven发布到私服配置-->
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.1.202:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.1.202:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Leave a Reply