微服务实践(三)Maven私服搭建

什么是Maven私服

Maven私服就是私人仓库的意思,一般在本地电脑会有本地的仓库,但是在微服务架构中协同进行开发的时候,因为都是在本地仓库的安装包,所以会存在依赖找不到的问题,这个时候就需要部署到服务器上,形成一个公司内网的仓库。

Maven私服的主要功能包括:

  1. 提高构建效率和稳定性:私服能够缓存和共享依赖库,减少依赖的下载和更新时间,提高构建效率和稳定性。
  2. 管理依赖库:私服能够管理本地和第三方的依赖库,通过版本控制、依赖合并、依赖查找等功能,实现依赖的统一管理和控制。
  3. 管理构建产物:私服能够存储和发布构建产物,通过版本控制、构建流水线等功能,实现构建的可追溯性和可管理性。
  4. 支持组织内部开源项目:私服能够存储和发布组织内部的开源项目,通过权限控制和版本控制等功能,实现开源项目的共享和管理。
  5. 支持自定义插件和配置:私服能够支持自定义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>