Windows下Nexus 3.X 搭建Maven私服
1:什么是私服
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件
2:私服优势
a 代理外部maven的中央仓库,你可以对外部中央仓库做过滤操作。
b 公司的开发人员不需要连接外网也可以从局域网的专属(自己安装nexus时新建的仓库)Repository下载依赖包。
c 可以发布模块或项目到自定义的专属仓库,供局域网内其他开发人员复用
d 节省外网带宽,大量的对于外部远程仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库后,对外的重复构件下载得以消除,即降低外网带宽的压力。
e 部署第三方构件 如组织内部的生成的私有的构件肯定无法从外部仓库获取,Oracle的JDBC驱动由于版权原因不能发布到外网的中心仓库。建立私服之后便可以将这些构件部署到本地私服中,供内部的Maven项目使用。
3 访问流程

4 下载地址
https://www.sonatype.com/download-oss-sonatype
5 环境要求
JDK: Java JDK8+
Maven: Apache Maven 3.0+
Nexus:nexus-3.26.1
6 解压nexus
选择合适版本 下载后解压即可 默认配置文件nexus-default.properties位于\nexus-3.26.1-02\etc下 如图

7 安装nexus服务
以管理员身份运行cmd 切换到 Nexus 程序目录 :
d:
cd nexus-3.26.1-02\bin
nexus.exe /install //安装服务
nexus.exe /start //启动nexus服务
nexus.exe /stop //停止nexus服务
过程会比较慢 , 请耐心等待几分钟左右 访问http://localhost:8081/ 访问nexus主页
8 登录nexus
默认密码 admin/admin123
9 仓库介绍

hosted宿主仓库,部署自己的jar包到这个类型的仓库,包括releases公司内部发行版本仓库以及第三方jar包
proxy代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。
group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。用户仓库地址选择Group的地址,即可访问Group中配置的 所有仓库资源,访问顺序取决于配置顺序3.x默认Releases,Snapshots,Central,可在web页面配置 在web界面点开
1)Maven可直接从宿主仓库(host)下载构件,也可以从代理仓库(proxy)下载构件,而代理仓库间接的从远程仓库下载并缓存构件
2)为了方便,Maven可以从仓库组(group)下载构件,而仓库组并没有时间的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容).

10 创建属于自己的三种类型仓库
a 创建proxy仓库组


创建页面出来之后,页面上有2个input框是必填的:

版本策略(Version Policy):
Release: 正式版本 一般选择release
Snapshot: 快照版本
Mixed: 混合模式
布局策略(Layout Policy):
Strict:严格 一般选择Strict
Permissive:宽松
高危预警:
【注意】:加入你想创建好几个proxy repository,以便于我可以加入更多的远程maven仓库到我的group 资源库中
唯一一点,就是你看你加入的proxy资源库哪个使用的是国内的maven仓库地址,哪个是国外的。当然国内的要放在国外的之前。
这样的加入group资源库的顺序就是 hosted资源库>国内proxy资源库>国外proxy资源库
b 创建host仓库组




c 创建group仓库组




此处的顺序控制了获取jar的顺序 非常重要 与前面的高危预警呼应
maven下的setting.xml文件和你自己项目中的pom.xml文件的关系:
Ⅰ.settting.xml文件就是本地,电脑上的全局变量;而pom.xml文件就是局部变量。
Ⅱ.自己创建的pom.xml文件肯定对于项目来说,优先使用的。然而pom.xml文件中如果没有指定jar要从哪里下载的话,也就是说没有配置镜像地址的话,当然只能去按照全局变量中定义的地址去找了
11 全局方式下载jar包
a 配置setting文件
<servers>
<server>
<!-- 这是server的id(注意不是用户登陆的id)。该id与distributionManagement中repository元素的id必须要匹配。-->
<id>nexus</id>
<!-- 服务器认证的用户名 -->
<username>admin</username>
<!-- 服务器认证的用户对应的密码 -->
<password>admin123</password>
</server>
</servers>
<!--组资源库的url地址 id和name自定义,mirrorOf的值设置为central,写死的-->
<mirror>
<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>nexus</id>
<name>nexus repository</name>
<url>http://localhost:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
#配置私服仓库
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>3rd_part</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
#激活并使用
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
b 配置pom依赖包 执行下载 在本地仓库 查看是否下载下来

12 上传简单jar包到私服
a 配置nexus用户
<server>
<!-- 这是server的id(注意不是用户登陆的id)。该id与distributionManagement中repository元素的id必须要匹配。-->
<id>nexus</id>
<!-- 服务器认证的用户名 -->
<username>admin</username>
<!-- 服务器认证的用户对应的密码 -->
<password>admin</password>
</server>
b 请先配置maven的环境变量 以方便执行相关命令 配置方式 参考https://www.cnblogs.com/LexMoon/p/JavaMaven.html
c 打开命令行 参考并执行如下命令
mvn deploy:deploy-file
-DgroupId=com.csource
-DartifactId=commons-io-1.3.3
-Dversion=1.24
-Dpackaging=jar
-Dfile=D:\.m2\repository\commons-io\commons-io\1.3.2\commons-io-1.3.2.jar
-Durl=http://localhost:8081/repository/3rd_part/
-DrepositoryId=nexus
命令解释:
-DgroupId=sxd.jar 自定义
-DartifactId=jacob 自定义
-Dversion=1.18 自定义 三个自定义,构成pom.xml的坐标
-Dpackaging=jar 上传的类型是jar类型
-Dfile=G:\jar\jacob-1.18.jar jar的本地磁盘位置
-Durl=http://localhost:8081/repository/3rd_part/ host仓库地址
-DrepositoryId=nexus setting.xml文件中配置的用戶ID
13 通过nexus界面发布jar包到私服
简单略过 请自己在页面尝试即可

14 打包项目发布到私服
a 配置nexus用户
<server>
<!-- 这是server的id(注意不是用户登陆的id)。该id与distributionManagement中repository元素的id必须要匹配。-->
<id>nexus1</id>
<!-- 服务器认证的用户名 -->
<username>admin</username>
<!-- 服务器认证的用户对应的密码 -->
<password>admin</password>
</server>
<server>
<!-- 这是server的id(注意不是用户登陆的id)。该id与distributionManagement中repository元素的id必须要匹配。-->
<id>nexus2</id>
<!-- 服务器认证的用户名 -->
<username>admin</username>
<!-- 服务器认证的用户对应的密码 -->
<password>admin</password>
</server>
b 配置pom.xml
<distributionManagement>
<repository>
<id>nexus1</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus2</id>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
c 执行mvn deploy就可以发布到你自己的私服上
浙公网安备 33010602011771号