所有的 Java 开发者应该是没有没用过 Maven 的吧。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试、部署等一系列行为。而包管理又是其核心功能,这篇文章简单介绍一下使用 Maven 私服管理依赖包。

当我们再 pom 文件中依赖了某个包后,如果在没有做特殊配置(也就是使用 maven 的默认配置)的情况下,Maven 会首先到本地仓库去搜索,如果本地仓库没有此依赖包,会到中央仓库获取,默认的中央仓库地址是 http://repo1.maven.org/maven2,服务器在国外,可想而知,速度是没办法保证的。当然国内也有相应的仓库,比如阿里的,速度还是很好的。

但是一般来讲,公司甚至团队内部都会搭建一个 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;

2、进入 nexus-version/bin/ 目录,运行 ./nexus start ;

3、访问 默认的 8081 端口即可;

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

另外,如果是 docker 环境,可以直接获取 nexus 的镜像完成安装。例如我在 mac 上直接搜索了 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 版本的包。

发布包

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,下面还会用到。

2、然后需要在 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 的地址。

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

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

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

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

最后

本篇只是一个简单的介绍,好多细节没有一一说明,相信没有用过的小伙伴也能很快配置并使用。如有问题,请留言或者直接在公众号内回复。

也可加微信群,一起来讨论技术。

最新文章

  1. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)
  2. js 日期时间排序 数组
  3. MyBatis &lt;if&gt;标签的一些问题
  4. 以前写过的一些oracle语句
  5. Codeforces 437B The Child and Set
  6. Maven assembly插件输出文件乱码问题
  7. php使用PDO方法详解
  8. 关于 python 新式类和旧式类继承顺序的验证
  9. 《11招玩转网络安全》之第三招:Web暴力破解-Low级别
  10. atmega16功耗实测
  11. html页面小技巧
  12. 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告
  13. PHP与MYSQL中UTF8 中文排序例子
  14. WP runtime 获取cookie
  15. php 查看使用多少内存
  16. [sh]函数+条件表达式
  17. 【matlab】图像直方图
  18. 验证:record项元的多少影响修改速度。
  19. 文件上传控件asp:FileUpload
  20. How to convert from BufferedImage to JavaFX 2.2 Image

热门文章

  1. 13.HashMap TreeMap HashTable LinkedHashMap 的区别
  2. Java使用对象流读取文件的问题
  3. 001-List,数组,Set,Map属性的映射
  4. MYSQL数据库学习十四 存储过程和函数的操作
  5. 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
  6. 【Python】 SSH连接的paramiko
  7. 小程序实现非swiper组件的自定义伪3D轮播图
  8. Matlab绘图基础——绘制三维曲线
  9. [jdoj1817]Drainage Ditches_网络流
  10. C语言第零次作业总结