Maven 私服 Nexus3 [ 福利:当当优惠码 ]
优惠码:PX3RVM 300减60 Z4JUCB 200减30
1、Maven和Nexus3 简介
Maven是一个采用纯Java编写的开源项目管理工具
采用一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。
目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。
Maven和ant都是软件构建工具(软件管理工具),Maven比Ant更加强大,已经取代了ant,jar包的声明式依赖描述。Maven有jar包的仓库。
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
公司如果没有maven私服,则需要用手动打jar包的方式添加依赖
2、安装 Maven
1、下载 maven
[root@qfedu.com ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
2、解压安装
[root@qfedu.com ~]# tar xf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
[root@qfedu.com ~]# cd /usr/local/
[root@qfedu.com ~]# ln -s apache-maven-3.5.4/ maven
3、安装 java 环境
[root@qfedu.com ~]# tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/
[root@qfedu.com ~]# cd /usr/local/
[root@qfedu.com ~]# ln -s jdk1.8.0_201/ java
4、添加环境变量
[root@qfedu.com ~]# vim /etc/profile
添加如下内容(这里的MAVEN_HOME需要改为你自己的maven解压目录):
JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH
重载环境变量
[root@qfedu.com ~]# source /etc/profile
5、验证 maven 安装
输入命令 mvn -version 看到如下内容说明安装成功了。
3、安装 nexus3
1、下载
专业版的nexus收费,下载开源版 Nexus OSS,下载地址为 https://www.sonatype.com/download-oss-sonatype
Wing下载的时候可以获取链接用迅雷下载,我是直接把https改成了http下载,下载下来的包大小不一样,我暂时使用的是小一点的120多M的安装包
2、解压
[root@qfedu.com ~]# cd /usr/local
[root@qfedu.com ~]# tar -zxf nexus-3.13.0-01-unix.tar.gz
解压后会多出两个目录,nexus-3.13.0-01和sonatype-work。
3、启动
[root@qfedu.com ~]# cd nexus-3.13.0-01/bin/
[root@qfedu.com ~]# ./nexus start
看到如图所示内容表明我们已经启动成功了,游览器输入http://localhost:8081即可访问。
注意:
启动后如果你立即访问可能发现什么都没有,不要急这个启动需要一定时间,1分钟后再尝试访问
登录 :
点击右上角的sign in登录,输入账户admin
密码:
# cat /root/sonatype-work/nexus3/admin.password
91c37108-809a-495b-942d-3932b9b33e04
4、仓库介绍
点击“设置-Repositories”,就可以看到仓库,分三种类型:
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包。
关于Maven的Snapshot版本与Release版本
Snapshot版本代表不稳定、尚处于开发中的版本
Release版本则代表稳定的版本
什么情况下该用SNAPSHOT? 协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNAPSHOT来标识自己。这种做法的必要性可以反证如下:
a.如果B不用SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升e68a84e8a2ade79fa5e9819331333363396362甚至每个小时一升,这就是对版本号的滥用。
b.如果B不用SNAPSHOT, 但一直使用一个单一的Release版本号,那当B更新后,A可能并不会接受到更新。因为A所使用的repository一般不会频繁更新release版本的缓存(即本地repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的B
不用Release版本,在所有地方都用SNAPSHOT版本行不行?不行。正式环境中不得使用snapshot版本的库。 比如说,今天你依赖某个snapshot版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的snapshot库。你再次构建时,Maven会去远程repository下载snapshot的最新版本,你构建时用的库就是新的jar文件了,这时正确性就很难保证了。
5、向 nexus3 私服上传 jar 包
1、准备环境
1、创建3rd_part
库
使用默认用户 admin/admin123 登陆
点击左侧的repository\repositories
后,在右侧点击create repository
然后选择maven2(hosted)
,填写如下
跳到首页后选择maven-public
将3rd_part
移到member
中,即将3rd_part
由maven-public
管理,点击save
至此,创建仓库完成
2、创建 3rd_part
管理用户
创建用户: 用户名/密码-dev/dev123
2、直接浏览器
使用dev/dev123
登陆,点击upload
填写上传jar包的信息后,点击upload
可以看到已经上传成功
4、常见错误
问题1:上传报错误码405,Failed to transfer file。
解决:仔细查看报错信息就会发现,是上传的url错了,原因就是repository的地址写错了。
问题2:错误码401或者403
解决:其实403错误就是“禁止访问”的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无法部署的问题在这个地方,方法是将其修改为“Allow Redeploy”就可以了。401就是Maven settings.xml没有设置密码
喜欢,在看