Maven(三) Maven私服使用Nexus搭建与应用

搭建 Maven 私服


1 什么是私服

私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程仓库,供局域网使用。 在企业开发中,私服的建设是有必要的,其好处如下:

1.1节省资金、外网带宽

利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力。

1.2 加速 Maven 构建

不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检 查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检查局域 网内私服的数据时,构建速度便有明显提高。

1.3部署第三方构件

当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权 原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内 部 Maven 项目使用。

1.4提高稳定性,增强控制

对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行,搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus)还提供了额外的管理功能。

1.5降低中央仓库的负荷

中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的 依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库。

2 使用 Nexus 搭建私服

2.1搭建环境

CentOS8、JDK1.8、Sonatype Nexus2.11.2

2.2搭建步骤

2.2.1 安装 JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html

本课程使用版本为 JDK1.8。(jdk-8u221-linux-x64.tar.gz)

2.2.1.1 JDK 资源包解压

在 Linux 中安装应用的常用目录为:/opt 或/usr/local 目录。本课件将 JDK 安装到/usr/local/jdk 目录中。

2.2.1.2 环境变量配置

修改/etc/profile 配置文件,增加环境变量配置。

export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

环境变量修改后,可以重启 Linux 实现永久生效;或执行 source /etc/profile 命令,让新 修改的环境变量在当前终端中生效。

2.2.2安装 Nexus

2.2.2.1Nexus 资源包下载

Nexus 官方下载地址为:

https://www.sonatype.com/nexus-repository-oss

本课件应用版本为:nexus-2.11.2-03

2.2.2.2 Nexus 资源包解压

在/usr/local 目录中创建子目录 nexus:

mkdir /usr/local/nexus

解压 Nexus 到指定目录:

tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus

Nexus 压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-work

nexus-2.11.2-03 是具体的私服应用内容,

sonatype-work 是 Nexus 私服下载的构件存放工作目录

2.2.2.3 检查私服端口和工作目录

在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。

配置文 件内容如下:

# Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。
application-port=8081
# 私服访问端口
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
# Nexus 私服 WEB 应用所在位置 nexus-webapp-context-path=/nexus
# Nexus 私服 WEB 应用 contextPath
# Nexus section Nexus 私服配置信息
nexus-work=${bundleBasedir}/../sonatype-work/nexus # 私服工作目录,即构件保存目录
runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录

2.2.2.4 改 修改 Nexus  运行用户

Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。Nexus 的启动脚本文件中,可以指定私服应用的访问用户,此信息在nexus-2.11.2-03/bin/nexus 脚本文件中定义。

需要修改的信息如下:

# NOTE - This will set the user which is used to run the Wrapper as well as
# the JVM and is not useful in situations where a privileged resource or
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER= #原内容
RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。

2.2.2.5 关闭防火墙

service firewalld stop

2.2.2.6 启动并测试访问

启动 Nexus 私服:

/usr/local/nexus/nexus-2.11.2-03/bin/nexus start

成功启动后,控制台输出内容如下:

****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.

可通过命令检查私服运行状态:

/usr/local/nexus/nexus-2.11.2-03/bin/nexus status

内容如下为私服运行中:

****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is running (3883).

内容如下为私服未运行:

****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is not running.

也可使用浏览器访问 Nexus 私服 WEB 应用, 访问地址为:

http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP)

2.2.3登录私服

Nexus 默认提供管理用户,用户名为 admin,密码为 admin123。

2.2.4仓库管理

2.2.4.1 查看仓库

2.2.4.2 仓库类型简述

3.2.2.1 group

仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组管理的多个仓库。

3.2.2.2 hosted

宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。

3.2.2.2.1 releases

发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中。

3.2.2.2.2 snapshots

发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。

3.2.2.2.3  3rd party

第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去

3.2.2.3 proxy

代理仓库:代理公共的远程仓库。

3.2.2.4 virtual

虚拟仓库:用于适配 Maven 1。

2.2.4.3 代理仓库配置

为 Nexus 配置阿里云代理仓库。

Nexus 默认远程仓库为 https://repo1.maven.org/maven2/

设置阿里云代理仓库

http://maven.aliyun.com/nexus/content/groups/public/

Repository ID: aliyun

Repository Name: Aliyun Repository

Remote Storage Location: http://maven.aliyun.com/nexus/content/groups/public/

把 aliyun 添加到仓库组中,并把 aliyun 排在 central 之上。

3 Nexus 用户管理

3.1Nexus 中的缺省用户及角色说明

在 Nexus 中内置了三个缺省用户,每个用户都拥有不同的角色,不同的角色对应不同的权限。在 Nexus 中用户必须要拥有角色。

3.1.1 admin 用户(管理员)

admin 管理员用户拥有最大权限,可以对 Nexus 进行全向控制。

3.1.2 deployment(部署用户)

deployment 用户为部署用户,该用户拥有对 nexus 的部分的操作,但是该用户具有对所有仓库的操作权限。

3.1.3 anonymous(匿名用户)

anonymous 用户为匿名用户,只具备了对 nexus 操作的部分权限,对于仓库也只是拥有读和查看权限。

3.2用户操作

3.2.1修改用户密码

点击 Change Password 修改用户密码。

输入当前密码以及新密码。

3.2.2新建用户

点击创建 Nexus Users 创建一个 Nexus 用户。

输入用户信息并给用户分配角色。

点击 Savea 按钮完成用户的创建。

在用户列表中可以查看到新创建用户。

3.2.3删除用户

选中需要删除的用户,点击删除按钮即可删除该用户。

4 私服应用

要在 Maven 工程中使用私服,需要提供私服配置信息。

4.1修改 settings.xml 配置文件

4.1.1在 servers 节点中添加仓库的用户认证

在<server>节点中配置仓库认证,操作仓库的用户以及密码,可以使用 deployment用户,该用户为 Nexus 的缺省用户,也可以自己创建用户。

<server>
	<id>releases</id>
	<username>deployment</username>
	<password>deployment123</password>
</server>
<server>
	<id>snapshots</id>
	<username>deployment</username>
	<password>deployment123</password>
</server>

4.1.2 在 profile 节点中添加配置信息

<profile>
	<id>sxt</id>
	<activation>
		<activeByDeffault>false </activeByDeffault>
		<jdk>1.8</jdk>
	</activation>
	<!-- 公共仓库配置 -->
	<repositories>
		<repository>
			<!-- 仓库 id -->
			<id>public</id>
			<!-- 私服地址 -->
			<url>http://192.168.233.129:8081/nexus/content/groups/public/</url>
			<!-- 仓库是否支持 releases 版本 -->
			<releases>
				<enabled>true</enabled>
			</releases>
			<!-- 仓库是否支持 snapshost 版本 -->
			<snapshost>
				<enabled>true</enabled>
			</snapshost>
		</repository>
	</repositories>
	<!-- 插件仓库配置 -->
	<pluginRepositories>
		<pluginRepository>
			<id>public</id>
			<url>http://192.168.233.129:8081/nexus/content/groups/public/</url>
			<!-- 插件仓库是否支持 releases 版本 -->
			<releases>
				<enabled>true</enabled>
			</releases>
			<!-- 插件仓库是否支持 snapshost 版本 -->
			<snapshost>
				<enabled>true</enabled>
			</snapshost>
		</pluginRepository>
	</pluginRepositories>
</profile>

4.1.3配置 activeProfiles 激活 profile

<activeProfiles>
	<!--根据 profile 的 id 标签值激活指定的内容-->
	<activeProfile>sxt</activeProfile>
</activeProfiles>

4.1.4删除阿里镜像仓库的配置

我们在私服中已经配置了对于连接阿里镜像的代理,所以在 setings.xml 中需要将该配置去掉,否则会自动去阿里镜像下载插件。

4.2在 POM 文件中配置私服

4.2.1创建项目

4.2.2修改 POM 文件

4.2.2.1 添加上传构件的仓库地址

<distributionManagement>
	<repository>
		<!-- 需要与 settings.xml 中 server 的 id 相同 -->
		<id>releases</id>
		<name>Nexus Release Repository</name>
		<url>http://192.168.233.129:8081/nexus/content/repositories/releases/</url>
	</repository>
	<snapshotRepository>
		<!-- 需要与 settings.xml 中 server 的 id 相同 -->
		<id>snapshots</id>
		<name>Nexus Snapshot Repository</name>
		<url>http://192.168.233.129:8081/nexus/content/repositories/snapshots/</url>
	</snapshotRepository>
</distributionManagement>

4.2.2.2 配置插件上传项目的源码包

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>2.1.2</version>
			<executions>
				<execution>
					<id>attach-sources</id>
					<goals>
						<goal>jar</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

4.3发布第三方构件到私服

4.3.1将第三方构建上传到 3rd party 仓库中

4.3.2在项目中引入第三方构件依赖

<dependency>
	<groupId>com.oracle</groupId>
	<artifactId>oracle-jdbc</artifactId>
	<version>6.0</version>
</dependency>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值