使用 Nexus 搭建 Maven 私服问题总结

本贴最后更新于 2494 天前,其中的信息可能已经事过景迁

#业务场景

最近项目要交付给客户了,之前项目开发和测试一直都是使用公司内部的一套环境,项目交付后客户购置了大量服务器,也要将整套测试环境迁移至客户的服务器上,后续的需求变更以及新需求的开发都会在客户服务器上进行开发和测试。当应用服务器环境、SVN 等全部准备好之后,我发现项目引用了大量我们公司封装的 jar 包,而这些 jar 包还是要从我们公司的 Maven 私服仓库下载,而客户这边则要求要在客户服务器上重新搭建一个 Maven 的私服仓库来管理 jar 包,不允许在使用我们公司的 maven 私服,所以我就开始协助客户使用 Nexus 这个仓库管理器来搭建 Maven 私服。下面就简单说一下在使用 Nexus 搭建 Maven 私服时碰到一些问题。

#搭建步骤

不多说了,网上大把教程,各个选项各个参数都有较为详细的介绍,这里推荐两个:

#搭建中的一些小问题

Nexus 2.x 版本和 3.x 版本差别很大,网上搜到的教程大多都是 2.x 版本的,3.x 的较少,由于之前没有搭建仓库的相关经验,这 3.x 版本上折腾了一番硬是没成功,根据工程学理论,所以我们选择了 2.x 版本在 windows server 上进行搭建。

理解 maven 各个仓库之间的关系

在项目中我们真正会用到的有三个 maven 仓库,本地仓库、私服仓库和中央仓库。

  • 本地仓库:即本地的 maven 仓库,也就是在安装 maven 的时候指定的本地仓库路径,配置在 maven 的 settings.xml 当中
  • 私服仓库:使用 Nexus 搭建好私服后配置的仓库,首先需要在搭建 Nexus 时进行配置在服务上的仓库地址,通常是在 sonatype-work\nexus\storage 下,也可以自定义路径覆盖默认路径。反映在本地的 settings.xml 当中则是配置的标签内 和当中。
  • 中央仓库,在项目中如果未使用 Maven 私服且都是用到的一些公用的 jar 包,那么本地工程 Maven 的默认配置都是从中央仓库进行下载。如果有用到私服,那么请求就是先从私服下载,如果私服仓库没有则去中央仓库进行检索下载。

三者之间的关系是,当我们在项目中依赖一个 jar 包时,Maven 程序会先去本地仓库中找,如果没找到就回去私服找,如果还是没有,最后就回去中央仓库找。如下图:
8e4e34761c784bf9bea3c7e9ead0b3ba-77970320170531222515086188297799.png

第三方 jar 包批量上传

这是碰到的一个头疼的问题,因为当时项目依赖了大量的我们公司自己封装的 jar 包,这些 jar 包在中央仓库里肯定是没有的,需要上传到 maven 私服当中。但是网上搜到的上传方法大都是一个个的上传到 thirdparty 这个仓库当中,如果照这种方式来不知要上传多久,我看更是有人祭出了自己写的脚本来做批量的上传,这就涉及到了 Maven 仓库的迁移。后面在网上找到一种相对简单的方法,即将原来用的依赖上传到 Nexus 所在服务器,然后在新建仓库时制定仓库路径来覆盖默认路径。具体操作如下:

  1. 新建 host 类型的仓库

  2. 在 Override Local Storage Location 选项上填入你上传的 maven 仓库的路径并覆盖默认路径。
    40d62fd89e654223850e5fe8f5dd4447-20180123111220.png

  3. 最好把 Deployment Policy 选项下勾选为 Allow Redeploy 方便后面 jar 修改后打包到私服仓库。

这样下来就可以了,我这边顺便把上传的 jar 包夜丢到了 thirdparty 的默认仓库下了。

本地 maven 仓库配置好之后部分 jar 包无法下载

配置完毕之后改了一下 maven 的 settings.xml 配置文件,在里面新增了两个 profile,一个是私服地址,一个是中央仓库地址。但是测试了几次,总是有几个包无法下载,其中就包括 oralce 的 ojdbc 驱动。我们都知道,oracle 官方没有把这个驱动 jar 包放到 maven 的中央仓库,所以几个用的比较广泛的中央仓库都是找不到这个 jar 的,但是这个 jar 包明明在我私服仓库里面是有的,问题可能就是在下载 jar 包的过程中请求中央仓库下载这些 jar 包没有成功。但是公司自己封装的 jar 包也都下载成功了。万分不解,后来中央仓库的地址配置似乎有问题,之前我是配置的默认的 http://repo1.maven.org/maven2/ ,后面修改成了 Nexus 一个默认的 group 类型的 Public Repositories 仓库,即 http://197.55.xx.xxx:8081/nexus/content/groups/public/jar, 包就能全部下载成功了,:'(

#总结

暂时到这里,里面还有一些我也没搞明白的地方,有机会再补充吧。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...