运维开发宝典064-CICD_Nexus3 搭建 maven 私服

十、CentOS7 使用 Nexus3 搭建 maven 私服

1、Nexus3 简介

Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。

maven和ant都是软件构建工具(软件管理工具),maven比ant更加强大,已经取代了ant,jar包的声明式依赖描述。maven有jar包的仓库。svn是一个软件的版本控制工具,是一个协同开发工具。svn的仓库存放的是项目的源码,历史版本的备份,声明每次版本的修改情况。

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

需求:

公司没有maven私服,需要用用手动打jar包的方式添加依赖很不友好,所以需要搭建 Nexus3 私服。

2、搭建 maven 私服

1.下载maven压缩包 apache-maven-3.5.4-bin.tar.gz ,然后解压 tar -zxf apache-maven-3.5.4-bin.tar.gz

复制代码
tar xf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-maven-3.5.4/ maven

2.添加环境变量

复制代码
vi /etc/profile

在文件下方添加如下内容(这里的MAVEN_HOME需要改为你自己的maven解压目录):

复制代码
export JAVA_HOME="/usr/local/java"
export MAVEN_HOME="/usr/local/maven"
export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"

source /etc/profile

然后保存退出。

3.输入命令 mvn version 看到如下内容说明安装成功了。

3、部署 nexus3

1、下载

由于专业版的nexus是收费的,所以我下载的是开源版 Nexus OSS,下载地址为 https://www.sonatype.com/download-oss-sonatype

点击红框区域即可下载得到文件nexus-3.13.0-01-unix.tar.gz,然后上传到服务器目录下,我的是/opt目录。

2、解压
复制代码
cd /usr/local
tar -zxf nexus-3.13.0-01-unix.tar.gz

解压后会多出两个目录,nexus-3.13.0-01和sonatype-work。

3、启动
复制代码
1 cd nexus-3.13.0-01/bin/
2 ./nexus start

看到如图所示内容表明我们已经启动成功了,游览器输入http://localhost:8081即可访问。

注意:

启动后如果你立即访问可能发现什么都没有,不要急这个启动需要一定时间,30秒后到1分钟后再尝试访问,这个开始我以为出问题了。

点击右上角的sign in登录,输入账户admin ,密码admin123即可登录成功。

4、仓库介绍

按图中标识顺序点击,就可以看到有这些仓库,现在分别介绍它们,分为三种类型:

proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。

Hosted :是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里,一般用来存放公司自己的jar包;

Group :是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可

**maven-public:**maven-central、maven-release和maven-snapshot三个库的合集。

**maven-release:**用来存放release版本的jar包。

**maven-snapshot:**用来存放snapshot版本的jar包。

一、向nexus3私服上传jar包

一般向私服上传jar包有三种方法:

  • 直接浏览器
  • cmd模式
  • IDE集成环境
1、准备环境

1.创建3rd_part

使用默认用户admin/admin123登陆

点击左侧的repository\repositories后,在右侧点击create repository

然后选择maven2(hosted),填写如下

跳到首页后选择maven-public

3rd_part移到member中,即将33rd_partmaven-public管理,点击save

至此,创建仓库完成

2.创建3rd_part管理用户

创建用户: 用户名/密码-dev/dev123

2、直接浏览器

使用dev/dev123登陆,点击upload

填写上传jar包的信息后,点击upload

可以看到已经上传成功

3、cmd模式

1.复制一份settings.xmlsettings-private.xml,在settings-private.xml文件中加入节点server:

xml 复制代码
<server>
  <id>maven-public</id>
  <username>dev</username>
  <password>dev.123</password>
</server>

在命令行中输入

console 复制代码
mvn deploy:deploy-file 
-DgroupId=dev 
-DartifactId=java 
-Dversion=1.0 
-Dpackaging=jar 
-Dfile=/tmp/jansi-1.17.1.jar 
-Durl=http://192.168.11.130:8081/repository/3rd_part/ 
-DrepositoryId=maven-public 
--settings /usr/local/maven/conf/settings-private.xml

其中-Durl3rd_part仓库的地址

-DrepositoryId即为之前server节点中的属性id的值,--settings指定maven的setting文件,即

4、IDE集成环境

settings-private.xml中的servers节点加入

xml 复制代码
<server>
  <id>nexus-release</id>
  <username>dev</username>
  <password>dev123</password>
</server>
<server>
  <id>nexus-snapshots</id>
  <username>dev</username>
  <password>dev123</password>
</server>

在maven工程项目nexus-upload中的pom文件中加入

xml 复制代码
<!--上传到nexus仓库中,配合mvn deploy:deploy-->
<distributionManagement>
 <repository>
     <!--这里的id需要和settings.xml中的server的id一致-->
     <id>nexus-release</id>
     <name>Nexus release Repository</name>
     <!--releases仓库-->
     <url>http://192.168.1*9.1*0:8081/repository/maven-releases/</url>
 </repository>
 <snapshotRepository>
     <id>nexus-snapshots</id>
     <name>Nexus snapshots Repository</name>
     <!--snapshots仓库-->
     <url>http://192.168.1*9.1*0:8081/repository/maven-snapshots/</url>
 </snapshotRepository>
</distributionManagement>

然后运行mvn deploy

可以在控制台

console 复制代码
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ nexus-upload ---
Downloading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/maven-metadata.xml
Uploading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/nexus-upload-1.0-20180303.072618-1.jar
Uploaded: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/nexus-upload-1.0-20180303.072618-1.jar (3 KB at 4.6 KB/sec)
Uploading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/nexus-upload-1.0-20180303.072618-1.pom
Uploaded: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/nexus-upload-1.0-20180303.072618-1.pom (4 KB at 9.6 KB/sec)
Downloading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/maven-metadata.xml
Uploading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/maven-metadata.xml
Uploaded: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/1.0-SNAPSHOT/maven-metadata.xml (773 B at 2.7 KB/sec)
Uploading: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/maven-metadata.xml
Uploaded: http://192.168.1*9.1*0:8081/repository/maven-snapshots/com/sijing/yjyuan/nexus-upload/maven-metadata.xml (287 B at 1.5 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.368 s
[INFO] Finished at: 2018-03-03T15:26:20+08:00
[INFO] Final Memory: 15M/250M
[INFO] ------------------------------------------------------------------------123456789101112131415161718

在nexus私服中可以看到

2、从nexus3私服上下载jar包

从私服中可以通过两种配置下载jar包

  • 在pom中配置

  • 在settings.xml文件中配置

1、pom中配置

在工程项目nexus-uploadpom文件中加入远程仓库地址

xml 复制代码
<!--从远程仓库下载-->
<repositories>
   <repository>
       <!--这个id不知道有什么用-->
       <id>local-repository</id>
       <url>http://192.168.1*9.1*0:8081/repository/maven-public/</url>
       <releases>
           <enabled>true</enabled>
       </releases>
       <snapshots>
           <enabled>true</enabled>
       </snapshots>
   </repository>
</repositories>

好像就可以了,。。。

2、在settings.xml中配置
xml 复制代码
<profiles>
  <profile>
  <id>your_company</id>
  <repositories>
    <repository>
      <id>spring_repo</id>
      <url>http://repo.spring.io/release/</url>
    </repository>
    <repository>
      <id>jboss_repo</id>
      <url>https://repository.jboss.org/</url>
    </repository>
  </repositories>
  </profile>
</profiles>
<activeProfiles>
  <activeProfile>your_company</activeProfile>
</activeProfiles>

6、常见错误及解决办法

问题一:上传报错误码405,Failed to transfer file。

**解决方法:**仔细查看报错信息就会发现,是上传的url错了,反正原因就是repository的地址写错了。

问题二:错误码401或者403

**解决方法:**其实403错误就是"禁止访问"的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是"Disable Redeploy",所以无法部署的问题在这个地方,方法是将其修改为"Allow Redeploy"就可以了。401就是Maven settings.xml没有设置密码

决方法:**仔细查看报错信息就会发现,是上传的url错了,反正原因就是repository的地址写错了。

问题二:错误码401或者403

**解决方法:**其实403错误就是"禁止访问"的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是"Disable Redeploy",所以无法部署的问题在这个地方,方法是将其修改为"Allow Redeploy"就可以了。401就是Maven settings.xml没有设置密码

相关推荐
卓怡学长17 分钟前
w175基于springboot校园二手物品交易平台
java·spring boot·spring·maven·intellij-idea
新时代牛马1 小时前
CFS调度源码:从 schedule() 到pick_next_entity 的vruntime 公平
linux·运维·网络
0+1111 小时前
Linux --库制作与原理
linux·运维·服务器
uxiang_blog1 小时前
Linux修改计算名字和添加删除用户名。
linux·运维·服务器
大模型码小白1 小时前
MCP协议开发实战:从零搭建AI Agent工具链
运维·人工智能·算法·机器学习·自动化
2601_962203511 小时前
Nginx 安装配置
运维·nginx
TDengine (老段)2 小时前
TDengine 应用案例 — IT 运维与可观测性
大数据·运维·数据库·制造·时序数据库·tdengine·涛思数据
观无2 小时前
.net发布注意事项
运维·服务器
AugustSkys3 小时前
云原生运维实战:ETCD 分布式存储集群运维、Kubernetes 高可用集群部署与版本平滑升级
运维·kubernetes