SSH Chapter 14 CentOS 7.6 搭建 Maven私服Nexus
本章目标:
前言:
Maven的三个仓库:
- 本地仓库:本地的一个文件夹,用来存放所有的jar包,由自己维护;
- 远程仓库(或私服):由公司或单位创建的一个仓库,由公司维护;
- *仓库:互联网上的仓库,由Maven团队维护;
三个仓库之间的联系:
Maven私服是:公司在自己的局域网内搭建的 maven远程仓库服务器,每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组就可以从私服服务器下载所依赖的组件(jar)。
私服还充当一个代理服务器,当私服上没有 jar 包会从互联网*仓库自动下载,如下图:
1. Xshell上传文件到Linux服务器上
在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xshell工具进行文件传输
-
首先连接上一台Linux主机
-
输入rz命令 , 看是否已经安装了lrzsz , 如果没有安装则执行如下命令进行安装。
yum -y install lrzsz
如图所示:
备注 : lrzsz是一款在Linux里可代替ftp上传和下载的程序。 -
安装成功后,输入rpm命令确认是否正确安装:
rpm -qa lrzsz
如图所示:
-
使用 rz -y命令进行文件上传,此时会弹出上传的窗口,命令如下:
rz -y
如图所示:
-
选择要上传的文件,点击确定即可将本地文件上传到Linux上,
如图表示成功上传文件: -
使用ls命令可以看到文件已经上传到了当前目录下:
2. 安装并配置JDK 8
2.1 下载 JDK
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
如图所示:
2.2 上传 JDK
在usr下创建software目录 , 将所有的软件放置于software目录下 , 命令如下:
mkdir /usr/software
使用如下命令切入到software目录下 :
cd /usr/software
使用Xshell,输入以下命令,将下载好的jdk上传到CentOS中,
rz -y
如图所示:
2.3 查看JDK是否安装过
安装之前查看是否有旧的jdk , 命令如下:
java -version
若已经安装 使用下面命令查看jdk安装包名称
rpm -qa|grep jdk
卸载旧的jdk
rpm -e jdk全名
2.4 安装 JDK
使用cd命令切换到目录/usr/software,命令如下:
cd /usr/software
输入命令将文件jdk-8u241-linux-x64.tar.gz 进行解压:
tar -zxvf /usr/software/jdk-8u241-linux-x64.tar.gz
解压完成的效果如图所示:
2.5 配置 JDK
输入以下命令修改配置文件,用来配置JDK环境变量:
vi /etc/profile
先将光标(可以使用快捷键Shift+g)移到最后一行,然后输入 i 进入编辑状态,粘贴如下内容:
export JAVA_HOME=/usr/software/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH
要根据自己的解压目录设置
输入Esc 进入命令模式 输入:wq! 保存修改信息 如图所示:
输入以下命令,使配置文件生效:
source /etc/profile
备注 :
export 命令
**功能说明:**设置或显示环境变量。
语 法:
export [-fnp][变量名称]=[变量设置值]
选 项:
-f:代表[变量名称]中为函数名称; -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中; -p:列出所有的shell赋予程序的环境变量。
**补充说明:**在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用
解释上面的命令如下:
$PATH:决定了shell将到哪些目录中寻找命令或程序
:冒号是分割符,相当于Windows中PATH环境变量路径之间的分隔符是;(分号)
2.6 测试 JDK 安装效果
键入命令以下,得到如图所示的结果,表示安装成功:
java -version
3. 搭建Maven
3.1 下载Maven
官网下载Maven的Linux版的压缩包,这里以Maven3.6.1为演示的案例,下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/
如图所示:
3.2 上传Maven
使用如下命令 , 切入到software目录下 :
cd /usr/software
使用如下命令 , 将Maven的压缩包上传至CentOS中:
rz -y
如图所示:
3.3 解压Maven
解压并安装Maven , 可参考官网:https://maven.apache.org/install.html
输入如下命令 , 解压apache-maven-3.6.1-bin.tar.gz:
tar -zxvf /usr/software/apache-maven-3.6.1-bin.tar.gz
3.4 配置环境变量
使用如下命令 , 配置Maven的环境变量:
vi /etc/profile
在文件下方输入以下内容:
export JAVA_HOME=/usr/software/jdk1.8.0_241
export MAVEN_HOME=/usr/software/apache-maven-3.6.1
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
注意:此处关于配置的Java环境变量不做任何改变
如图所示:
输入以下命令,使配置文件生效:
source /etc/profile
3.5 测试安装效果
输入命令如下命令:
mvn -version
看到如下效果 , 证明安装成功了
4. 搭建Nexus
4.1 Nexus简介:
使用Maven可以对项目的各种依赖进行统一管理,在pom文件中定以好依赖,就可以从Maven*库或者第三方库中下载到本地。但在企业内部使用也会遇到一些问题,每个使用者都需要去下载相应的依赖包或者插件,效率低下,浪费带宽,所以搭建企业内部的私服就很有必要。
搭建私服后,所有的依赖就可以从私服下载,私服会自动判定,如果私服库里没有这个资源,则私服会自动去网上下载,如果私服已经包含所需资源,则可以通过内网提供给使用者,大大提高工作效率。
Nexus是Maven常用的私服,安装使用都很方便,用于搭建企业内部的maven私服。
4.2 为什么使用:
- 节省外网带宽。
- 加速Maven构建 , 提高效率。
- 部署第三方组件。
- 提高稳定性,增强安全控制。
- 降低*仓库的负荷。
- 建立本地内部公用仓库
4.3 Nexus仓库类型介绍:
- hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
- proxy,代理仓库,它们被用来代理远程的公共仓库,如maven*仓库。
- group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
4.4 管理本地仓库
我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:
-
Releases:
这里存放我们自己项目中发布的组件, 通常是Release版本的, 比如我们自己做了一个Web Server的项目, 生成的构件为server.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. -
Snapshots:
这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本. -
3rd Party:
顾名思义, 第三方库, 指的是可以让你添加自己的第三方库, 比如有些组件在*仓库是不存在的. 比如你在*仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。
4.5 CentOS 7.6 安装Nexus
4.5.1 下载Nexus
首先要吐槽官网慢到怀疑人生,安装包根本下载不下来。
地址:https://www.sonatype.com/
下载地址:https://www.sonatype.com/download-nexus-repo-oss
版本/收费/免费:Nexus Repository Manager 仓库管理有2个版本,专业版和oss版,oss版是免费的,专业版是收费的,我们使用oss版。
官方安装文档:https://help.sonatype.com/repomanager3/installation/installation-methods
此案例以nexus-3.20.1-01版本为演示所用的版本
4.5.2 安装Nexus
-
上传nexus-3.20.1-01-unix.tar.gz到CentOS上usr目录下 , 命令如下:
# 先定位到usr/software目录下 cd /usr/software # 使用rz -y上传文件 rz -y
-
解压文件nexus-3.20.1-01-unix.tar.gz , 使用如下命令:
tar -zxvf /usr/software/nexus-3.20.1-01-unix.tar.gz
-
定位到nexus-3.20.1-01/bin目录下 , 修改nexus文件 , 具体命令如下:
# 定位到目录下 cd /usr/software/nexus-3.20.1-01/bin/ # 修改nexus文件 vi nexus
-
修改文件的内容为:
run_as_user='root' run_as_root=false
保存并退出 , 如图所示:
-
Nexus安装目录下nexus-3.20.1-01/etc/nexus-default.properties配置表中可以修改以下属性:
# Nexus服务监听的端口; application-port=8081 # Nexus服务监听的主机; application-host=0.0.0.0 # Nexus服务的上下文路径 nexus-context-path=/
如图所示:
4.6 启动 Nexus
Nexus自带了Jetty容器,因此用户不需要安装额外的web容器就能直接启动nexus
-
启动Nexus , 命令如下:
#使用cd命令 定义到/usr/software/nexus-3.20.1-01/bin目录下 cd /usr/software/nexus-3.20.1-01/bin # 启动Nexus admin123 # ./nexus run ./nexus start
如图所示:
-
开放8081端口号 , 命令如下:
firewall-cmd --add-port=8081/tcp --permanent firewall-cmd --reload
如图所示:
-
查看admin用户的密码 , 命令如下:
cat /usr/software/sonatype-work/nexus3/admin.password
如图所示:
-
复制此密码 , 打开浏览器,输入ip:8081,登录账号:admin,密码粘贴上后登录,成功!
如图所示:
可以选择修改admin密码: -
Nexus 仓库类型介绍:
如图所示:
Maven用到的Repositories说明:
maven-central:maven*库,默认从**https://repo1.maven.org/maven2/**拉取jar
maven-releases:私库发行版jar
maven-snapshots:私库快照(调试版本)jar
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。
5. 使用Nexus
5.1 远程仓库的操作
5.1.1 上传jar包到远程仓库中
需求 : 将之前smbms多模块中的smbms-common提交到远程仓库中
解决步骤如下 :
-
在Maven的 settings.xml中配置nexus访问权限 :
打开apache-maven-3.6.1\conf目录下的settings.xml文件 , 在<servers>
标签中加入如下内容:<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
如图所示:
解释servers元素如下:
这是一个身份验证配置文件列表,由系统中使用的服务器id作为键。
其下面可以定义一系列的server子元素,表示当需要连接到一个远程服务器的时候需要使用到的身份验证信息。id,服务器的ID,Maven在连接一个库或者镜像的时候,通过id匹配要连接的服务器;
username, password,连接服务器所需的认证信息;
-
在项目的pom.xml中配置nexus仓库位置 :
找到smbms_demo中的smbms_parent模块中的pom.xml文件,加入以下内容:<!-- 使用分发管理将本项目打成jar包,直接上传到指定服务器 --> <distributionManagement> <!--正式版本--> <repository> <id>releases</id> <url>http://192.168.1.181:8081/repository/maven-releases/</url> </repository> <!--快照--> <snapshotRepository> <id>snapshots</id> <url>http://192.168.1.181:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
备注:此处id为releases下的url可以在Nexus私服上拷贝,如图所示:
同理 id为snapshots下的url也可以在Nexus私服上拷贝 , 如图所示: -
注意:以上2个配置标签中的id必须要一致
-
使用deploy命令将项目打包,发布到nexus中 , 切入smbms_common目录中,CMD窗口输入如下命令:
mvn clean deploy
或者使用点击IDEA中的Maven菜单栏下生命周期中的
deploy
, 如图所示:
控制台显示success代表成功 , 如图所示: -
检查远程仓库中是否有上传好的jar包;点击Nexus私服中的浏览内容,下一步点击浏览,接着点击
maven-snapshots
, 如图所示:
如下图所示 , 证明我们已经将jar包到上传到远程仓库中了
5.1.2 从远程仓库下载jar包
需求 : 将上传到远程仓库中的smbms-common.jar包 ,下载到smbms_demo项目中的smbms_user_web模块中
解决步骤如下 :
-
编辑
apache-maven-3.6.1\conf
目录下的settings.xml
文件 , 使用<profile>
标签在settings.xml
中<profiles>
标签下配置仓库位置 , 内容如下:<!--配置nexus仓库地址 从远程仓库下载jar包--> <!--profile可以让我们定义一系列的配置信息,然后指定其激活条件--> <profile> <!-- profile的唯一标识 --> <id>mynexus</id> <!--用于定义远程仓库的,当该profile是激活状态的时候,这里面定义的远程仓库将作为当前pom的远程仓库。--> <repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.1.181:8081/repository/maven-public/</url> <releases> <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 --> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile>
如图所示:
备注 : 上图中的url可以从Nexus私服中的maven-public
中复制 , 如图所示: -
依旧编辑
apache-maven-3.6.1\conf
目录下的settings.xml
文件 , 使用<activeProfiles>
激活刚才配置的<profiles>
标签,使其发生作用 , 内容如下:<!--激活profiles中的mynexus配置--> <activeProfiles> <!--此处配置为profile标签中的id--> <activeProfile>mynexus</activeProfile> </activeProfiles>
如图所示:
备注:前面两步也可以在子模块中的
pom.xml
文件中使用局部配置:<repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.1.181:8081/repository/maven-public/</url> <releases> <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 --> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
-
如果之前打包了,删除本地仓库下的smbms_common目录 , 如图所示:
-
设置匿名用户访问Nexus私服的权限 , 首先点击配置图标, 其次点击安全验证图标, 再次点击验证图标下的匿名图标,最后勾选允许匿名用户访问Nexus私服,具体操作如图所示:
-
到Nexus中的smbms_common的依赖坐标到smbms_user_web模块中的
pom.xml
文件中 , 如图操作所示:第一步:
第二步:
第三步: -
更新项目,从远程仓库中获取了smbms_common.jar , 如上图所示
5.2 自定义远程仓库的使用
使用自定义用户和自定义仓库进行上传和下载jar包
5.2.1 创建自定义角色以及用户
-
在Roles中可以增加用户权限组,里边可以自定义用户权限
具体操作如图所示:
第一步 , 进入自定义用户角色界面:
第二步 , 创建自定义的用户角色:
第四步 , 如图所示代表角色创建成功: -
在Users中创建用户,并分配设置好的权限
具体操作如图所示:
第一步 , 进入创建自定义用户的界面:
第二步 , 创建用户并分配自定义的角色:
第三步 , 查看用户是否创建成功 , 如图所示 , 代表创建成功 -
使用创建的用户登录 , 并在Repositories中新建仓库
具体操作如图所示:
第一步 , 使用新创建的用户登录Nexus私服 , 如图所示:
第二步 , 进入创建Repositories的界面 , 如图所示:
第三步 , 选择maven2(hosted)类型 , 如图所示:
第四步 , 进入创建仓库的页面 , 填写相应的信息 , 如图所示:解释图上关键字如下:
- Name : 仓库名称
- Version pollcy:版本策略;有三种版本策略,分别是:
- Release:发行版
- Snapshot:快照版
- Mixed:混合模式
- Layout pollcy:布局策略;有两种布局策略 , 分别是 :
- Strict:严格
- Permissive:宽松
- Deployment pollcy:部署策略;有三种部署策略 , 分别是 :
- Allow redeploy:允许重新部署
- Disable redeploy:禁止重新部署
- Read-only:只读
第五步 , 查看自定义仓库是否创建成功 , 如图所示 , 代表成功:
5.2.2 上传jar包到自定义的仓库中
需求 : 将之前smbms多模块中的smbms-common提交到远程仓库中
解决步骤可参考5.1.1的解决步骤, 只需稍作修改关键元素即可 ,具体如下 :
-
在Maven的 setting.xml中配置nexus访问权限 :
打开apache-maven-3.6.1\conf目录下的settings.xml文件 , 将之前在<servers>
标签中加入内容修改为如下内容:<server> <id>releases</id> <!--将用户名与密码修改为自定义的用户名与密码--> <username>bdqn</username> <password>123456</password> </server> <server> <id>snapshots</id> <!--将用户名与密码修改为自定义的用户名与密码--> <username>bdqn</username> <password>123456</password> </server>
如图所示:
-
在项目的pom.xml中修改配置nexus仓库位置 :
找到之前smbms_demo中的smbms_parent模块中的pom.xml文件,将关于Nexus仓库的位置修改为以下内容:<distributionManagement> <repository> <id>releases</id> <!--releases的url保持不变 --> <url>http://192.168.1.181:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <!--将快照版本的url修改为自定义仓库的快照版本的url --> <url>http://192.168.1.181:8081/repository/bdqn-snapshots/</url> </snapshotRepository> </distributionManagement>
id为snapshots下的url需要重新在Nexus私服上拷贝 , 如图所示:
-
注意:以上2个配置标签中的id必须要一致
-
使用deploy命令将项目打包,发布到nexus中 , 切入smbms_common目录中,CMD窗口输入如下命令:
mvn clean deploy
或者使用点击IDEA中的Maven菜单栏下生命周期中的
deploy
, 如图所示:
控制台显示success代表成功 , 如图所示: -
检查自定义的远程仓库中是否有上传好的jar包;点击Nexus私服中的浏览内容,下一步点击浏览 , 接着点击
bdqn-snapshots
, 如图所示:
如下图所示 , 证明我们已经将jar包到上传到自定义的远程仓库中了:
5.2.3 从自定义的远程仓库下载jar包
需求 : 将上传到自定义远程仓库中的smbms-common.jar包 ,下载到smbms_demo项目中的smbms_user_web模块中
解决步骤如下 :
-
配置Repositories中的maven-public, 在分组中仓库中将自定义的bdqn-snapshots移入 , 将maven-snapshots移出 , 具体操作如图所示:
第一步 , 进入Repositories中的maven-public的界面,如图所示:
第二步 , 在仓库分组中添加bdqn-snapshots , 并将maven-snapshots移出 , 效果如图所示: -
apache-maven-3.6.1\conf
目录下的settings.xml
文件中的<profile>
标签保持不变 , 内容如下:<!--配置nexus仓库地址 从远程仓库下载jar包--> <profile> <id>mynexus</id> <repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.1.181:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile>
如图所示:
备注 : 上图中的url可以从Nexus私服中的maven-public
中复制 , 如图所示: -
apache-maven-3.6.1\conf
目录下的settings.xml
文件 中的<activeProfiles>
也保持不变 , 内容如下:<!--激活profiles中的mynexus配置--> <activeProfiles> <!--此处配置为profile标签中的id--> <activeProfile>mynexus</activeProfile> </activeProfiles>
如图所示:
备注:前面2.3两步也可以在pom.xml文件中使用局部配置:<repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.1.181:8081/repository/maven-public/</url> <releases> <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 --> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
-
如果之前打包了,删除本地仓库下的smbms_common目录 , 如图所示:
-
复制找到自定义远程仓库中的smbms_common的依赖坐标到smbms_user_web模块中的
pom.xml
文件中 , 如图操作所示:第一步:
第二步:
第三步: -
更新项目,从自定义的远程仓库中获取了smbms_common.jar , 如上图所示
5.3 上传releases(发布)版的jar包
需求 : 将smbms多模块中的smbms-common提交到远程仓库中 , 并将版本发布为releases版本
解决步骤如下:
-
修改smbms_common模块中的pom.xml文件 , 在
<artifactId>
元素下加入<version>
标签 , 标注为releases版本 , 添加的内容如下:<version>0.0.1</version>
如图所示:
-
使用deploy命令将项目打包,发布到远程仓库中 , 切入smbms_common目录中,CMD窗口输入如下命令:
mvn clean deploy
或者使用点击IDEA中的Maven菜单栏下生命周期中的
deploy
, 如图所示:
控制台显示success代表成功 , 如图所示: -
检查自定义的远程仓库中是否有上传好的jar包;点击Nexus私服中的浏览内容,下一步点击浏览, 接着点击
maven-releases
,效果如图所示:
如下图所示 , 证明我们已经将releases版的jar包到上传到远程仓库中了:
注意:下载releases版的jar包到本地目录中,需要使用maven插件编译一下才可以将之前上传的releases版的jar包下载到本地
5.4 上传第三方的jar包
注意 : 上传第三方的jar包 , 必须是releases版本的 , 所以jar包中的名字不能含有snapshot关键字
需求 : 将Oracle的jar包(ojdbc5.jar)上传到远程仓库中
解决步骤如下:
-
在浏览服务内容下点击上传按钮 , 接着点击
maven-releases
, 进入上传jar包的界面 , 如图所示: -
选择对应的jar包 , 并填写maven一系列的详细信息 , 如图所示:
-
如下图所示 , 代表上传第三方jar包成功:
-
查看jar包的详细信息 , 如图所示: