文档章节

你们公司用的 Maven 私服就是这么搭建的

古时的风筝
 古时的风筝
发布于 06/16 11:34
字数 1998
阅读 1.9W
收藏 93

精选30+云产品,助力企业轻松上云!>>>

我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。

差不多所有的 Java 开发者应该都用过 Maven 的吧,如果你没用过,那可能你正在用的是 Gradle,如果这俩你都没用过,那就有点不太正常了。顺道说一句,在 Gradle 眼里,Maven 什么的都是垃圾。

Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试、部署等一系列行为。

而包管理又是其核心功能,除非是个人项目,我们获取包都是从中央仓库或者 github 获取,但是公司项目呢,为了提供高速,一般都会搭建公司内部或者团队内部的 Maven 私服仓库。

为什么要搭建私服

当我们再 pom 文件中依赖了某个包后,如果在没有做特殊配置(也就是使用 maven 的默认配置)的情况下,Maven 会首先到本地仓库去搜索,如果本地仓库没有此依赖包,会到中央仓库获取,默认的中央仓库地址是 http://repo1.maven.org/maven2,服务器在国外,可想而知,速度是没办法保证的。有时候运气不好,晚上拉下来一个开源项目,执行 Maven 包安装,早上睡醒了一看,还没下载完,你说来气不。

当然国内也有相应的仓库,比如阿里的,速度还是很好的。

但是一般来讲,公司甚至团队内部都会搭建一个 Maven 私服,一来稳定性可以得到保证,再者,比如公司内部的一些基础包或者项目的通过工具包之类的,也可以放到上面来,从而提高项目开发的灵活度。

例如公司有一个底层工具包,没有私服的情况下,我们拿到这个包,要将它安装到本地仓库,需要执行如下命令:

mvn install:install-file 
-Dfile=common-util-0.0.1-SNAPSHOT.jar 
-DgroupId=com.kite 
-DartifactId=common-util
-Dversion=0.0.1-SNAPSHOT 
-Dpackaging=jar

一旦做了修改,本地还需要重新执行命令,是不是很麻烦。

私服搭建流程

Nexus 是用来搭建 Maven 私服的,可以说是最好的免费工具了,它的官网上是这样说的:“世界上第一个也是唯一的免费使用的仓库解决方案”。目前的最新版本是 OSS 3.x。提供了针对 Windows、Unix、OS X 三种系统的版本。

这里只简单说明 Linux 下的安装方式,如果是下载的最新版本,它对系统内存和 jdk 版本是有要求的,要求内存大于4G,jdk 最低是1.8版本。

  1. 下载包,并解压缩,运行命令
tar -zxvf nexus-version-unix.tar.gz
  1. 进入 nexus-version/bin/`` 目录,执行命令 ./nexus start`

  2. 访问 默认的 8081 端口即可

没错,就是这么简单。

通常情况下,以上三步就可以完成安装,如果有问题,并且提示“ NOT RECOMMENDED TO RUN AS ROOT ”,可以通过修改 /bin/nexus 文件,在其中加入 RUN_AS_USER=root ,然后重新启动即可。

另外,如果是 docker 环境,可以直接获取 nexus 的镜像完成安装。例如我在 mac 上直接搜索了 nexus,然后下载并启动即可。

初识 Nexus

当我们通过地址,在浏览器上访问 nexus 的首页,是下图这样子的:

默认的账号名是 admin,密码是 admin123。管理员登录后,可以在设置页面管理角色、用户等其他一系列的操作。例如创建一个角色,给角色设置某一仓库的管理权限,然后向这个角色中添加人员。具体操作不做过多介绍,一看就明白。

管理员还可以管理仓库,不过一般来说,默认的那几个仓库就可以了。默认有如下几个仓库:

几种 type 是什么意思

proxy:这是代理方式,它是用来代理中央仓库的,例如我们依赖的包在本地仓库没有,就会到私服获取,私服没有的话,会到中央仓库先把包下载到这里,然后再下载到本地仓库;

hosted:指的是我们公司或团队内部的包,并且 hosted 类型的仓库会分为 releases 和 snapshots 两个,前者是正式版,后者一般是开发测试版;

group:它的目的就是把多个仓库组合起来,然后我们项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。

在项目中使用

获取依赖包

如果是普通项目成员,不需要向私服发布包的,只需要在 pom 文件中加入以下配置即可。

<repositories>
      <repository>
            <id>maven-public</id>
            <name>maven-public</name>
            <url>http://nexus.local:32768/repository/maven-public/</url>
            <snapshots>
               <enabled>true</enabled>
            </snapshots>
       </repository>
</repositories>

其中 id 要和你的仓库名称一致,url 就是私服的仓库地址,就是 type 为 group 的那个,它组合了一个 proxy 类型的和两个 hosted 类型的仓库。设置 snapshots 的 enabled 为ture,表示允许下载 snapshots 版本的包。

发布(deploy)包

  1. 如果需要向仓库中发布包的,首先需要对仓库有权限才可以,没有权限的用户是没办法发布的。

打开 maven 的配置文件 setting.xml ,找到 servers 节点,然后在其中添加一个 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>

请注意上面的 id,一会儿在 pom 文件中还会用到。

  1. 然后需要在 pom 文件中配置下面的内容:
<distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>maven-releases</name>
            <url>http://nexus.local:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>maven-snapshots</name>
            <url>http://nexus.local:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
</distributionManagement>

我们看到其中配置了一个 repository ,另外还有一个 snapshotRepository,上面表示的是 releases 版。同样注意 id 要和 setting.xml 里 server 下的 id 一致,不然会出现权限问题。url 分别指定 maven-releases 和 maven-snapshots 的地址。

只要在项目中配置 <version>1.0-SNAPSHOT</version> 这样,带有 SNAPSHOT 的就会到 snapshots 仓库,如果不加 SNAPSHOT 就会到 releases 仓库。

还有要注意的是,你要发布的包不应该是上级,也就是不能有 parent 依赖。否则在获取依赖的时候会有问题。

  1. 最后执行 mvn clean deploy 命令,即可发布包到私服仓库中。

通过以上配置和操作,就可以完成包的发布过程。

最后

如果你的团队内部用了自己的私服仓库,那基本上都是用的这种方式。如果使用过程中出现什么问题,可以怀疑是私服是不是坏了。比如我们团队中之前用的 Maven 私服就挂过。


壮士且慢,先给点个赞吧,总是被白嫖,身体吃不消!

我是风筝,公众号「古时的风筝」。一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!你可选择现在就关注我,或者看看历史文章再关注也不迟。

古时的风筝
粉丝 21
博文 9
码字总数 30087
作品 0
东城
私信 提问
加载中
此博客有 6 条评论,请先登录后再查看。
使用Nexus搭建Maven私服问题总结

#业务场景 最近项目要交付给客户了,之前项目开发和测试一直都是使用公司内部的一套环境,项目交付后客户购置了大量服务器,也要将整套测试环境迁移至客户的服务器上,后续的需求变更以及新需...

osc_caanga79
2018/02/05
13
0
maven | 从搭建私服到上线运行

引言 很久以前按照教程搭建过maven私服,那时候用的版本比较低,那也是出于好奇,玩玩而已,当时有将JavaLib这个包放在上面,嗯,也是能用的,后来因为这个服务与其他服务莫名其妙的冲突,所...

成都_小冯同学
2018/08/06
0
0
Maven搭建私服

为什么要搭建私服?搭建私服有什么好处? 以我最近技术调研和相关的使用为起点概述: 首先说明,为什么要搭建私服? 搭建私服的目的是,通常企业项目开发,特别是使用maven作为项目管理,现在非...

osc_rzibnjco
2018/08/03
2
0
Nexus安装和使用

1、前言 最近项目需要搭建maven私服,方便管理后期团队成员使用上传自己的包,因此决定使用nexus来搭建私服,搭建好的nexus地址。 2、准备工作 阿里云服务器ECS一台 1核CPU 2G内存(注意:最低...

osc_7shyb795
2019/08/24
5
0
Maven私服搭建

一、仓库:本地仓库、第三方仓库(内部中心仓库私服)、中央仓库 1、本地仓库:1)、maven将工程中依赖的jar包(构件)从远程下载到本地某目录下管理,通常默认存储地址为${user.home}/.m2/...

osc_8jk0uanm
2018/12/25
2
0

没有更多内容

加载失败,请刷新页面

加载更多

BIOS开启虚拟化技术支持_MQ

安装虚拟机前开启虚拟化技术支持 1.首先,你需要确认的使你的计算机型号和CPU、BIOS的型号,因为过老的计算机是不支持虚拟化技术的。 2.那么怎么知道呢,方法很简单。开机时按F2、F12、DEL、...

osc_52r4y6wv
27分钟前
14
0
推进BI国产化替代,永洪科技新产品性能提升200%

各行各业已经进入到数字化转型的时间,数字化成为未来企业必须的标签,“国产化替代”成为当今企业的首要选择。 7月9日,以《绽放科技创新力量,推进BI国产化替代》为主题的2020永洪科技新产...

osc_4x0ulctb
29分钟前
19
0
手把手教你Python GUI开发系列之--框架

框架 框架(Frame)相对于其他组件而言,它只是个容器,因为它没有方法,但它可以捕获键盘和鼠标的事件来进行回调。 框架一般用作包含组控件的主体,且可以定制外观。 创建不同样式的框架 再次...

osc_8eb8cps3
29分钟前
13
0
Just test it!!软件测试测起来!!

(图片: josh@unsplash,字数:700,时间:1分钟) (一) 一切的软件质量保障活动,归根结底,就两种类型。 一种是基于代码执行的,一种是不基于代码执行的。 测试之于肉眼自查、静态检查、代...

osc_8cqhsn24
30分钟前
19
0
A Bug's Life POJ - 2492

A Bug's Life Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only inte......

osc_7nzqlmki
32分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部