在 Docker 搭建 Maven 私有库

小引

If you are developing software without a repository manager you are likely missing a number of opportunities to reduce some pretty obvious inefficiencies. If everyone on your team has to hit public repositories like the Central Repository to download components, you are missing out on some simple gains in speed and efficiency. If you don’t have a local place to deploy components you are forced to share binary components using half-measures and compromises such as storing binaries in source control. Stop developing in the Dark Ages, read this book, and start using a repository manager. Trust us, once you start using a Nexus Repository Manager, you’ll wonder how you ever functioned without it.此文源自Repository Management with Nexus

破船译:在软件开发中,如果没有使用仓库管理工具(repository manager),你将与高效率擦肩而过。如果团队中的每个开发人员都去类似 Central Repository 这样公共的仓库中获取组件,那么肯定会在速度和效率上得不偿失。在本地,如果没有提供一个地方来部署组件,那你使用的策略肯定需要作出许多妥协,比如在代码版本库中存储二进制文件(非常不建议这样做)。停止如此原始的开发方式吧,请阅读此书,并开启 repository manager 时代吧。一旦你开始使用 repository manager(Nexus),你肯定会抱怨为什么以前不使用它呢。

作为一个希望让正确的事情持续发生的人来说,对速度和效率的追求是一个永恒的话题。身为开发人员的我们,如今在开发过程中,无论是 Android、iOS 或后端开发,都不可避免会用到第三方库,这也也催生了许多优秀的第三方依赖管理工具,例如 iOS 的 CocoaPods,Java 后端开发的 Maven,Android 则使用 Gradle。而由于绿色环境的原因,有的人可能在下载第三方依赖时陷入了漫长的等待中,或许可以美名其曰:喝杯咖啡的时间刚刚好。但是当喝完咖啡回来时,发现屏幕上出现的是 TIMEOUT,顿时陷入了沉思。或许对于没有发现因此而催生的特色产业(代理、VPN)人来说,已经开始怀疑人生了。当然,针对这个问题,国内也有许多加速器可以使用,或许别的办法。不过,在这篇文章中,我不会告诉你如何寻找加速器、如何设置源、如何科学上网。本文我将给大家介绍如何搭建 Maven 私有库。

简介

我们在进行 Java 后端开发时,为了解决工程对第三方库依赖管理,一般都会使用 Maven 工程,大家都知道如果对每一个依赖库都从 Central Repository 下载,那么速度会很慢,有时候对于只有几 K 的一个库,都会下载不失败(科学上网的可以忽略),这会让人很抓狂,如果多人进行协同开发,那么这样的抓狂会被扩大。那么比较好的解决办法,就是搭建内部自己的 Maven 私有库。我们希望私有库提供这样的功能,在工程下载依赖的时候,如果私有库中存在这个依赖库,则直接从这个私有库中下载,如果私有库中没有所需要的依赖库,私有库先从 Central Repository 中下载并缓存,下次在获取的时候,就直接使用该缓存即可。大家可能会问,有没有这样的工具呢?其实早就有了,Nexus 就是其中之一。下面就进入正文吧。

下载 Nexus 镜像

这里推荐的方案是利用 Docker 来搭建 Nexus 环境。这里默认大家已经都有 Docker 环境了。

首先利用下面的命令下载最新的 nexus 镜像

docker pull sonatype/nexus

下载过程如下所示:

1
2
3
4
5
6
7
8
9
10
11
docker pull sonatype/nexus
Using default tag: latest
latest: Pulling from sonatype/nexus
8d30e94188e7: Pull complete
9b5961d40d03: Pull complete
074855ae6153: Pull complete
cc0a3a494fba: Pull complete
8cfd0607bbfb: Pull complete
Digest: sha256:6bb1966022009da38c4f679b51d2106f4d595aa7b887ac0bf93d14ebe4c0faa2
Status: Downloaded newer image for sonatype/nexus:latest

创建并启动 Nexus

首先创建一个数据卷容器,如下命令

docker run -d –name nexus-data sonatype/nexus echo “data-only container for Nexus”

然后启动 Nexus

docker run -d -p 10081:8081 –name nexus –volumes-from nexus-data sonatype/nexus

上面的命令中,将本机的 10081 端口映射到容器中的 8081 端口,并加载 数据卷容器 nexus-data。

创建容器过程需要一段时间时间进行初始化,可以用如下命令查看相关日志:

docker logs -f nexus

在浏览器输入 http://localhost:10081/nexus/ 可以看到如下界面,说明 nexus 已经启动好了。

使用 Nexus

在这个私有库中,提供了一些仓库地址给我们使用,如下图所示:

关于每个仓库的意义何在,请移步到 Nexus 的官网中学习(文末给出了参考链接),此文不再进行介绍。

私有仓库的使用有两种方法,一种是对工程的 pom.xml 文件进行修改(这种方法只对 pom.xml 所属工程生效),如下所示:
将如下的repositories节点添加到 pom.xml 文件即可,Maven 会到此文件中配置的私有库,下载相应的依赖库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>testnexus</groupId>
<artifactId>zzx</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://localhost:10081/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
</dependencies>
</project>

另外一种方法就是直接修改 maven 的配置文件,这样所有工程默认都会使用私有库。如下所示:

~/.m2/settings.xml 文件中,将 mirror 修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:10081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

当利用 maven 进行工程打包时,可以看到,已经从私有库中下载依赖了(当在另外一台机器上使用相应的依赖库时,就直接使用私有库中所缓存的依赖了,不用再到互联网中下载,是不是很节约时间!):

1
2
3
4
5
6
7
8
9
10
testnesus mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building zzx 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://localhost:10081/nexus/content/groups/public/com/alibaba/fastjson/1.1.41/fastjson-1.1.41.pom
Downloaded: http://localhost:10081/nexus/content/groups/public/com/alibaba/fastjson/1.1.41/fastjson-1.1.41.pom (9 KB at 2.9 KB/sec)
Downloading: http://localhost:10081/nexus/content/groups/public/com/alibaba/fastjson/1.1.41/fastjson-1.1.41.jar
Downloaded: http://localhost:10081/nexus/content/groups/public/com/alibaba/fastjson/1.1.41/fastjson-1.1.41.jar (350 KB at 16.5 KB/sec)

关于更多内容,请上 Nexus 的官网学习。

转自: http://beyondvincent.com/2016/09/23/2016-09-23-use-nexus-with-docker/

在 Docker 搭建 Maven 私有库的更多相关文章

  1. 安装Maven并搭建Maven私有仓库

    一.说明 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.我们在进行Java代码开发的时候,Eclipse+Maven+Jetty是一个十 ...

  2. 实战maven私有仓库三部曲之三:Docker下搭建maven私有仓库

    本章是<实战maven私有仓库>系列的第三篇,在前两章中,我们先在linux搭建maven私有仓库,然后在开发环境使用此仓库,本章我们在docker下快速搭建maven私有仓库,然后像前面 ...

  3. maven私有库搭建

    一.在企业中基本上都会有自己的maven私有库,主要的目的就是方便依赖包的下载.如果采用远程的方式来实现的话,很多时候会考虑网速问题.如果自己活着公司搭建的私有库,这一样在使用上面会效率更高. 二.私 ...

  4. Dubbo入门到精通学习笔记(四):持续集成管理平台之Maven私有库和本地库的安装与配置

    文章目录 介绍 Maven私有库和本地库的安装与配置 Nexus安装 Nexus 配置(登录后) 介绍 如果构建的Maven项目本地仓库没有对应的依赖包,那么就会去Nexus私服去下载, 那么如果Ne ...

  5. 利用 Docker 搭建 IPFS 私有网络

    利用 Docker 搭建 IPFS 私有网络 本文原始地址:https://sitoi.cn/posts/40630.html 下载项目 项目地址:https://github.com/Sitoi/p ...

  6. 使用nexus3.10搭建maven私有仓库

    使用nexus3.10搭建maven私有仓库-----详见如下链接-- --此贴用于笔记 https://blog.csdn.net/vipbupafeng/article/details/80232 ...

  7. Gradle系列之从零搭建Maven私服库

    原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇文章学习了 Gradle 相关知识,Gradle 系列文章如下: Gradle系列之初识Gradle Gradle之Groovy基础篇 ...

  8. docker搭建harbor私有镜像库

    创建harbor私有镜像库 一.部署准备: harbor软件包   在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下   tar zxvf harbor- ...

  9. CentOS安装Nexus(Maven私有库)详细配置及上传本地jar到私服

    Nexus原理 Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库Maven Central(由Apache维护)中寻 ...

随机推荐

  1. 代码静态测试(java)

    工欲善其事,必先利其器 环境 jdk1.8 IntelliJ IDEA 1.静态代码检查 1.1工具 阿里代码规范检测工具 安装教程:阿里代码规范检查工具 1.2规范等级 在 Snoar 中对代码规则 ...

  2. Windows10系统下安装配置Tomcat 9.0.1

    Tomcat9.0.1下载:https://tomcat.apache.org/download-90.cgi 配置jdk的环境变量(略) 在系统变量里新建变量名:CATALINA_BASE,变量值: ...

  3. python文件处理-将图像根据坐标画矩形标记

    内容涉及:文件遍历,选取csv后缀文件,用cv操作图片 import csv import os import sys import numpy as np import copy import sh ...

  4. 禁用rm命令

    (1)[root@tf ~]# alias rm='echo do not use rm command'[root@tf ~]# vim /etc/profile   alias rm='echo ...

  5. mac安装Hadoop,mysql,hive,sqoop教程

    在安装Hadoop,mysql,hive之前,首先要保证电脑上安装了jdk 一.配置jdk 1. 下载jdk http://www.oracle.com/technetwork/java/javase ...

  6. 同一WpfApplication下简单的页面转换

    别人写的很不错的Dome...分享学习下 源文件地址 : http://pan.baidu.com/share/link?shareid=1698564707&uk=3912660076

  7. SpringCloud之zuul

  8. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之Nginx配置

    搭建好LNMP环境之后,接着要考虑的就是整个系统的并发能力了. 一.Nginx的配置 Nginx有很好的并发能力.但是要想使它的并发能力能够施展出来,需要在初步安装好的Nginx上做一些配置.主要需要 ...

  9. PreparedStatement 防止sql注入 练习

    使用的数据库 MariaDB 10.5.4版本   端口1054     数据库为jt_db,表 为user 数据库的建表和插入相关数据代码: create table user( id int pr ...

  10. Mister B and PR Shifts,题解

    题目链接 分析: 题意很明白,不再多说了,直接分析题目,首先想一想暴力,直接枚举起点,然后求出来,时间复杂度n*n,显然不太好,所以我们考虑换一种方法枚举,当然本质还是枚举,其实你会发现变化i次和i+ ...