背景
近期换了一个项目组,用的是公司自研产品,涉及到很多内部JAR包引用,版本号很多,每次更新都是产品部给出jar包,项目组成员各自复制一套本地替换,来了新人各种安装配置,复杂度太高,这不,我一来,又是这里给我几个包又是那里替换几个引用,环境整的头大。Nexus 私服就是解决这问题的关键。
其实几年前,就给这边搭过一次nexus2.0,我走了后似乎就没用过了,废话不多说。再来一遍呗。
版本
JDK: 1.8.0_151 (请自行解决安装)
Nexus: 3.0.0-03
Maven: apache-maven-3.3.3
Windows: 10
执行步骤
a、安装Nexus,这是部署在服务器上的,相当于是Server端,要是放在自己电脑上就没什么意义了。
1、下载Nexus对应版本,解压到指定目录。
2、查看Nexus对应的端口,打开配置文件 ./etc/org.sonatype.nexus.cfg,我们这里的端口是 8888。不同的版本对应的配置文件可能不同,都在etc下面,找到配置有application-port这个属性就OK了。
3、修改数据存储路径,可以直接使用默认的,支持相对和绝对路径。
4、启动Nexus,这里使用管理员身份的cmd运行命令可以把Nexus安装成服务,跟随系统启动。
nexus.exe /install <optional-service-name> #安装
nexus.exe /start <optional-service-name> #开始
nexus.exe /stop <optional-service-name> #结束
nexus.exe /uninstall <optional-service-name> #卸载
#其中<optional-service-name>为服务的名称,可自定义
也可以直接打开 Nexus.exe运行应用。
5、使用默认密码登陆Nexus控制台,默认用户密码: admin/admin123。登陆地址:http://127.0.0.1:8888
6、打开配置页面,创建本地库。此处由于时间关系就不涉及用户权限管理相关内容,如果公司内部项目组过多,且要求保密性,则需要分用户创建本地库。
点击 Create repository,创建本地版本库,上图中红框中的版本库是我们的本地库,其余为默认创建。创建步骤如下:
这里简单介绍下几种repository的类型:
- hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
- proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
- group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
保存完毕,仓库就创建完成了。仓库地址:http://9.1.77.86:8888/repository/maven-jfbuilder/
7、打开仓库组 maven-public,将刚建立的本地库maven-jfbuilder 添加到仓库组中
添加本地仓库进入仓库组:
保存完成,这样就完成了整体的Nexus配置。
b、安装 Maven
1、下载Maven对应版本,解压到指定目录,例如:E:Toolsmavenapache-maven-3.3.3 。
2、为了更好的随时随地使用 MVN 命令,配置一下环境变量,将Maven配置安装到操作系统环境变量中去。
添加自己的maven存放路径:
点击确定完成环境配置。
3、检查一下是否配置成功。打开CMD控制台,输入: mvn help:system,界面显示 BUILD SUCCESS.
再查看一下 ~/.m2/repository(这是在你的本地用户目录下面) 是否存在一些最近时间的文件夹,存在则恭喜你成功了。
c、配置Maven连接私服
1、修改Maven的配置文件 setting.xml。
- 本地库地址可以修改也可以使用默认,我这里采用的是默认配置 Default ,如需修改,则放开下图中红框的语句,修改路径即可。
- 配置安装好的Nexus私服的用户名密码。
d、上传公司内部Jar包到Nexus私服。
执行命令将所有私有JAR包上传:
mvn deploy:deploy-file "-DgroupId=com.adtec.starring" "-DartifactId=comm" "-Dversion=6.0.0.3.RELEASE" "-Dpackaging=jar" "-Dfile=E:JavaFrameLibJavaFrame-comm-6.0.0.3.RELEASE.jar" "-Durl=http://9.1.77.86:8888/repository/maven-jfbuilder/" "-DrepositoryId=nexus"这里简单介绍一下各个参数的含义:
- DgroupId、DartifactId、Dversion: 构成该jar包在pom.xml中引用的标签。上传时可以随意修改,你开心就好啦。
- Dpackaging:打包类型。
- Dfile:需要上传的jar包的绝对路径。
- Durl:私服上自己建立仓库的地址,打开nexus->repositories菜单,可以看到该路径。
- DrepositoryId:服务器的表示id,就是我们之前在Maven的配置文件setting.xml中配置的server id。
如果不是win10的话,上述命令的双引号是无需添加的。这个问题有点坑,也许有些win10可能也不存在这个问题。我拿出两年前的命令如下:
mvn deploy:deploy-file -DgroupId=com.adtec.starring -DartifactId=comm -Dversion=6.0.0.3.RELEASE -Dpackaging=jar -Dfile=E:JavaFrameLibJavaFrame-comm-6.0.0.3.RELEASE.jar -Durl=http://9.1.77.86:8888/repository/maven-jfbuilder/ -DrepositoryId=nexus执行完成:
项目使用
a、修改Pom.xml文件,添加本地私服地址。
b、更新项目Maven引用就完成了。