【Maven】CentOS7使用Nexus3搭建maven私服
一、简介
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包的方式添加依赖,所以不得不研究这个了。
二、搭建maven
1.下载maven压缩包 apache-maven-3.5.4-bin.tar.gz ,然后解压 tar -zxf apache-maven-3.5.4-bin.tar.gz
2.添加环境变量
vi /etc/profile
在文件下方添加如下内容(这里的MAVEN_HOME需要改为你自己的maven解压目录):
export JAVA_HOME="/opt/jdk1.8"
export MAVEN_HOME="/opt/apache-maven-3.5.4"
export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"
然后保存退出。
3.输入命令 mvn version 看到如下内容说明安装成功了。

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

点击红框区域即可下载得到文件nexus-3.13.0-01-unix.tar.gz,然后上传到服务器目录下,我的是/opt目录。
3.2.解压
cd /opt
tar -zxf nexus-3.13.0-01-unix.tar.gz
解压后会多出两个目录,nexus-3.13.0-01和sonatype-work。
虽然不知道后面一个目录是干嘛的,不管它就行了。
3.3.启动
cd nexus-3.13.0-01/bin/
./nexus start

看到如图所示内容表明我们已经启动成功了,游览器输入http://localhost:8081即可访问。
注意:
1.Nexus3开始访问URL已经变了,以前是http://localhost:8081/nexus,这个坑了我好一会儿。
2.启动后如果你立即访问可能发现什么都没有,不要急这个启动需要一定时间,30秒后到1分钟后再尝试访问,这个开始我以为出问题了。
点击右上角的sign in登录,输入账户admin,密码admin123即可登录成功。
3.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包。
四、上传jar包到maven私服
4.1添加仓库认证
找到本地电脑的setting.xml(我的是C:\Users\2YSP\.m2\setting.xml),打开后找到servers节点,在里面添加如下内容。
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
4.2在项目的pom.xml添加远程发布的私服仓库地址
<distributionManagement>
<repository>
<!--此id要与setting.xml里面server的id对应-->
<id>releases</id>
<name>releases Repository</name>
<url>http://192.168.75.132:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://192.168.75.132:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
这里的192.168.75.132是我虚拟机的IP地址,这里的URL可以点击仓库查看详情获取。
4.3发布

先点击clean,在点击deploy就会自动根据项目的版本上传到对应的仓库(如果pom.xml上版本是1.1-SNAPSHOT则会deploy到maven-snapshot,如果是1.1.RELEASE则会deploy到maven-release)。
一般打包时maven会自动执行单元测试很耗时间,如果想略过该过程可以在pom文件添加如下插件。
<!-- 打包跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
上传结果如图:

然后在maven仓库里就可以找到我们刚刚上传的jar包了。

注意:maven仓库的Deployment policy一定要设置成allow redeploy,否则会上传失败。
五、从私服下载jar包
5.1添加仓库地址
<repositories>
<repository>
<id>releases</id>
<name>maven-public</name>
<url>http://192.168.75.132:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository> </repositories>
针对单个项目,这个可以添加到项目的pom.xml文件里,如果很多项目都需要可以添加到setting.xml文件中。
5.2添加依赖,以下为示例
<dependency>
<groupId>cn.sp</groupId>
<artifactId>kafka-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
然后一刷新发现项目里就有了。
六、常见错误及解决办法
问题一:上传报错误码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没有设置密码。
具体参考地址:https://www.javatang.com/archives/2010/01/23/4518375.html
【Maven】CentOS7使用Nexus3搭建maven私服的更多相关文章
- 【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
参考文章: http://www.cnblogs.com/luotaoyeah/p/3791966.html --------------------------------------------- ...
- 使用Nexus3搭建Maven私服
1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...
- 使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...
- Maven学习 使用Nexus搭建Maven私服(转)
为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...
- Maven学习-使用Nexus搭建Maven私服
为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...
- Maven学习使用Nexus搭建Maven私服
原文:http://www.cnblogs.com/quanyongan/archive/2013/04/24/3037589.html 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给 ...
- maven spark Scala idea搭建maven项目的 pom.xml文件配置
1.pom.xml文件配置,直接上代码. <?xml version="1.0" encoding="UTF-8"?> <project xm ...
- CentOS 7 使用Nexus3搭建maven私服
安装jdk(略) 安装maven wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3. ...
- Windows下nexus-3.*搭建Maven私服
1.下载 从官网下载https://help.sonatype.com/display/NXRM3/Download 选择Windows archive https://download.sonaty ...
随机推荐
- java面向对象day01
前言: 1.首先我们要明白:万物皆对象.现实中存在的事物都是对象.而面向对象技术就是对客观事物进行抽象.2.而java语言是纯面向对象的的语言,它具有描述对象及其相互之间关系的语言成分.3.定义类和建 ...
- rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnec
在mysql5中,可以设置safe mode,比如在一个更新语句中 UPDATE table_name SET bDeleted=0; 执行时会错误,报: You are using safe upd ...
- java的计时:毫秒、纳秒
System.currentTimeMillis()获取毫秒值,但是其精度依赖操作系统 想实现较为精确的毫秒,可以采用 System.nanoTime()/1000000L System.nanoTi ...
- HDU3459:Rubik 2×2×2(IDA)
Problem Description Sonny is probably the only computer science Ph.D. student who cannot solve a Rub ...
- 解决cell切割线不是全屏问题
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) { [_tableView setSeparatorInset:U ...
- 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)
各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...
- uml时序图的初印象-------Day64
近期有好多想法迫不及待的想去实现,但是其实是在那些最開始想的很明确,感觉会没问题的地方也总是会出现故障,导致稍微有些急躁,还是要淡定啊.又到了周末.明后天要收拾东西搬家,不知道宽带能不能顺利的给挪过去 ...
- ==和equals的差别
== 和 Equals 的差别 1. == 是一个运算符. 2.Equals则是string对象的方法.能够.(点)出来. 我们比較无非就是这两种 1.基本数据类型比較 2.引用对象比較 1.基本数据 ...
- Android:内存控制及OOM处理
1. OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的).所以,出现OOM不一定是Me ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 文档简介
Osd Scd (1) Introduction over view a) scene change detection block diagram a) gr ...