1 . 私服简介
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。
第一步: jdk 已安装, 没安装的话 ,先安装jdk: https://blog.youkuaiyun.com/tang_jian_dong/article/details/83089046
第二步: 下载 nexus: https://help.sonatype.com/repomanager2/download ,
下载 oss (open source software) 开源版
选择liunx版本
下载nexus 后上传至liunx, 解压文件: tar -zxvf nexus-2.14.10-01-bundle.tar.gz
解压后,有这两个文件夹:
nexus-2.12.0-01: 是nexus的核心文件
sonatype-work :maven下载jar存放地址
第一:设置java 地址
vim /nexus-2.14.10.01/bin/jsw/conf/wrapper.conf
将 wrapper.java.command = java 改为 wrapper.java.command = jdk目录/bin/java
如果出现
- ****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running
this
script.
那么默认情况下,不建议以root用户运行Nexus,可以修改bin/nexus中的配置跳过警告(修改RUN_AS_USER=root)
也可以 export RUN_AS_USER=root
然后在bin目录下 ./nexus start
将 nexus 设为开机启动:
vim /etc/rc.d/rc.local
加入: 安装目录路径下/bin/nexus start.
su 你的用户名 -lc "/software/nexus/nexus-2.14.10-01/bin/nexus start"
保存退出后,将文件添加可执行权限,
sudo chmod +x rc.local
reboot 后, service nexus status 查看是否正常开机启动
启动后就可以访问了, ip地址: 默认端口8081/nexus/#welcome. 默认的登录用户名密码是 admin/admin123
修改配置
将 Available Repositories 的 仓库移到左边
创建账户:
1:远程仓库验证:
大部分公共的远程仓库无须认证就可以直接访问,但我们在平时的开发中往往会架设自己的Maven远程仓库,出于安全方面的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以配置在settings.xml文件中,也可直接在pom.xml中配置,后面会分别举例说明,但是认证信息必须配置在settings.xml文件中。在settings.xml中配置认证信息更为安全。如下:在settings.xml中配置<servers>节点,用的账号为上面我们创建的账户。
<settings>
<!--配置远程仓库认证信息-->
<servers>
<server>
<id>bbsnexus</id>
<username>licui</username>
<password>a111111</password>
</server>
</servers>
</settings>
上面代码我们配置了一个id为bbsnexus的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。认证用户名为licui,认证密码为a111111。这里的关键是id元素,id没有要求,随便定义,但是后面配置远程仓库的id必须和这里的id保持一致。正是这个id将认证信息与仓库配置联系在了一起。
2:配置远程仓库:
repository:在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。
id:仓库声明的唯一id,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库声明也使用该id,就会覆盖中央仓库的配置。
name:仓库的名称,让我们直观方便的知道仓库是哪个,暂时没发现其他太大的含义。
url:指向了仓库的地址,一般来说,该地址都基于http协议,Maven用户都可以在浏览器中打开仓库地址浏览构件。
releases和snapshots:用来控制Maven对于发布版构件和快照版构件的下载权限。需要注意的是enabled子元素,该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。根据该配置,Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。
layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到Maven1的布局。
其他:对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。
元素updatePolicy用来配置Maven从远处仓库检查更新的频率,默认值是daily,表示Maven每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。
元素checksumPolicy用来配置Maven检查校验和文件的策略。当构建被部署到Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其他可用的值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
3:配置仓库镜像:
4.上传jar包到远程仓库
1)将已有的项目打成jar包上传到私服服务器
首先需要在pom.xml中配置上传仓库的地址,配置distributionManagement元素,仓库地址指向前面自定义的仓库bbsid
<distributionManagement>
<repository>
<id>bbsnexus</id>
<name>bbsidrepository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/bbsid</url>
</repository>
</distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)jar包的仓库,后者表示快照版本(开发测试版本)的仓库。
这两个元素都需要配置id、name和url,id为远程仓库的唯一标识,很重要,name只是为了方便人阅读,关键的url表示该仓库的地址。
往远程仓库部署jar包的时候,需要认证,配置认证的方式为id,一定要与前面settings中server的id保持一致。
如果项目当前的版本是快照版本,则部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址,因为这里只是测试演示,前面只创建了Release版本的仓库bbsid,所以省略了snapshotRepository。
配置正确后,定位到要上传的项目目录,运行命令mvn clean deploy,Maven就会直接将项目打包生成的jar包部署到配置对应的远程仓库中。
2)上传第三方jar包到远程仓库
方式一 (假设发布仓库为bbsid,发布Jar包为zbb-sms-0.0.1.jar):
A. settings.xml中配置认证信息。
B. 定位到要上传的jar包的目录,执行“ mvn deploy:deploy-file -DgroupId=com.zxp.test -DartifactId=sms -Dversion=1.0 -Dpackaging=jar -Dfile=zbb-sms-0.0.1.jar -Durl=http://127.0.0.1:8081/nexus/content/repositories/bbsid -DrepositoryId=bbsnexus”命令。
说明:deploy:deploy-file表示发布独立的文件。
groupId、artifactId和version可根据需要设定。(我们要传的包为zbb-sms-0.0.1.jar,但是命令里指定-Dversion=1.0,-DartifactId=sms,所以最终上传到仓库后的名称为sms-1.0.jar)
url为Nexus服务器中需要上传的仓库路径。
repositoryId与server的id必须一致。
方式二 Nexus控制台直接上传jar包 (假设发布仓库为bbsid,发布Jar包为mysql-connector-java-5.1.43.jar):
在Repositories列表中选择Releases,点Artifact Upload,指定GAV Definition为“GAV Parameters”,然后输入相应的groupId、artifactId和version、Packaging,再点击“Select Artifact(s) to Upload...”选择指定的Jar文件,点击“Add ActifactId”添加到Actifacts框,最后点“Upload Artifact(s)”即可。
阿里云中央仓库地址:
http://maven.aliyun.com/nexus/content/groups/public/