前言
近期在做系统优化,重构等工作,关于本地jar包、三方jar(未上传到中央仓库)的管理比较的混乱,因此决定搭建一个Maven的私服来完善一下这一块儿;
- Maven的基础示意图
通常,我们并没有使用到虚线标识的那两块儿,基本都是通过本机的Maven直接访问到中央仓库;
问题分析
Maven给我们带来的诸多的好处,这里就不多说了,这里仅仅列一些直接使用中央仓库可能会给我们带来的问题。及使用私服是如何解决的。
- 网络问题
- 问题原因
由于国内安全的网络环境,导致经常会出现无法连接远端maven仓库从而导致jar包更新失败,这个时候,我们就只能被迫去学会科学上网了。 - 解决方式
当我们搭建好私服之后,本地优先是连接的私服,如果私有有就直接下载私服的资源并使用,这样相当于只需要私服到中央仓库下载一次就好了,之后的资源获取使用的就是私有仓库,那么就不会出现网络问题而导致jar无法更新;
- 问题原因
- 私有项目的管理
企业内部的资源,我们就可以上传到本地私服,这样所有的团队成员就可以通过maven的依赖进行资源管理了; - 三方未上传到maven中央仓库的类库
部分开源的三方类库没有上传到Maven中央仓库的,那么我们也可以将其上传到本地私服,这样团队成员之间就可以通过maven依赖来使用这些资源了;
环境搭建
说明
- 软硬件环境
CentOS7
Docker
Nexus3 - 准备工作
- Docker安装
自从开始使用Docker之后,每次这种安装软件的操作,第一刻想到的就是看看有没有Docker的方式;真的可谓是:一用Docker一时爽,一直用一直爽啊!,如果没有安装Docker的,可以参考:Linux下安装Docker及基础操作 - Nexus3镜像
Nexus3 Docker官网镜像地址,这里使用的是最新版,使用以下指令下载镜像:docker pull sonatype/nexus3
- Docker安装
Nexus3安装
- 创建nexus的挂载文件夹
文件夹的目录可以根据个人情况指定,如果不想挂载文件夹,那么可以忽略这一步(记住:忽略之后,下面的指令把-v的那部分去掉),资源就由容器自行去管理,为了数据的安全性,建议挂载操作mkdir -p /home/mvn/nexus-data && chown -R 200 /home/mvn/nexus-data
- 安装
由于我的8081被其他业务占用了,这里就使用了8181作为了nexus的端口
两条指令(不挂载的话一条指令),Nexus3的安装就完成了,是不是超级爽!!!docker run -d -p 8181:8081 --name nexus -v /home/mvn/nexus-data:/nexus-data sonatype/nexus3
- 管理页面
访问监听的端口即可进入管理平台
默认管理员用户名:admin 密码:admin123
- 创建本地库
- 作用
存放本地资源及三方资源,后续需要用上,这里就先创建了放这里 - 创建第一步
- 创建第二步
- 创建第三步
- 作用
本地Maven配置
修改setting.xml
- 添加server配置
<server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>3rdParty</id> <username>admin</username> <password>admin123</password> </server>
- 添加mirrors配置
<mirror> <id>nexus</id> <name>nexus Mirror chenshu repository</name> <url>http://192.168.1.207:8181/repository/maven-public/</url> <mirrorOf>*</mirrorOf> </mirror> <mirror> <id>3rdParty</id> <name>3rd party repository</name> <url>http://192.168.1.207:8181/repository/3rdParty/</url> <mirrorOf>3rdParty</mirrorOf> </mirror>
- 配置profiles
<profile> <id>jdk1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> <repositories> <repository> <id>maven-public</id> <url>http://192.168.1.207:8181/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> <repository> <id>3rdParty</id> <url>http://192.168.1.207:8181/repository/3rdParty/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile>
上传本地Jar
- 创建或下载本地资源
假定以上jar为本地或者三方的jar - 使用以下命令上传到本地私有库
mvn deploy:deploy-file -DgroupId=com.lupf -DartifactId=mymaven -Dversion=1.0.0 -Dpackaging=jar -Dfile=mymaven.jar -Durl=http://192.168.1.207:8081/repository/3rdParty/ -DrepositoryId=3rdParty
- 指令说明
-DgroupId:jar的groupId
-DartifactId:jar的artifactId
-Dversion:jar的版本
-Dpackaging:指定包为jar
-Dfile:文件地址,可以设置绝对路径,由于我cmd进入了对应的目录,下面的指令使用的相对路径
-Durl:本地仓库的地址
-DrepositoryId:仓库名称
- 指令说明
使用本地包
- pom.xml添加maven依赖
- 更新拉取资源
使用以下指令mvn compile -U
结合Idea上传本地项目至私有库
企业中,不可避免的存在多人、多部门协同开发,为了开发、联调更加方便,我们可以将依赖上传至本地仓库,多方进行依赖,即可快速获取到他人或其他项目组的资源,进行快速开发、联调及测试。
-
创建maven项目
idea new一个即可 -
pom文件添加本地仓库的配置
记得把以下的地址改为个人私有仓库的地址<repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.1.207:8181/repository/maven-public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus Plugin Repository</name> <url>http://192.168.1.207:8181/repository/maven-public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://192.168.1.207:8181/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.1.207:8181/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
-
编译上传
mvn deploy
-
开发版及正式版
version中,有-SNAPSHOT就是开发版,没有就是稳定正式版,他们会分别上传到maven中的maven-snapshots和maven-releases
-
snapshots和releases的区别
snapshot:每次都会从服务器拉取一个最新的版本使用,因此这种版本很适合开发过程中使用,当有bug或者调整,维护提交了之后,使用就会获取到最新的使用。
releases:当检测到本地的maven仓库有相应的版本之后,不会去服务器拉取,就直接使用本地的版本了。
到此,本地资源库已经搭建成功并且可以正常使用了,后续使用如果有问题,再来完善!