在 Docker 搭建 Maven 私有库

在 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/

时间: 2024-12-21 15:34:03

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

As发布aar到maven私有库

As发布aar到maven私有库,按照网上的例子我试了几次,可以发布成功,但是死活,implementation下载到本地,不能自动import,通过查看external libraries发现同步过来的classes.jar下面没有内容.当时没放在心上,有其他事要做,还加班到深夜. 接下来两天,心里始终有个疙瘩.因为我们要做的东西直接as生成的aar是可以本地使用的,公司也有自己的maven私有库,供外网访问,如果不能用as直接发布到上面好使毕竟不好.也试过手动把aar上传到Maven私服Ne

docker搭建harbor私有镜像库

创建harbor私有镜像库 一.部署准备: harbor软件包 在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下 tar zxvf harbor-offline-installer-v1.4.0.tgz [[email protected] kubernetes]# cd harbor [[email protected] harbor]# ls common docker-compose.notary.yml ha harbor.v1.4.0.ta

基础架构之Maven私有库

Maven对于Java开发来说肯定不会陌生,由于各种问题,公司常常需要搭建自己的私有Maven仓库. (一)  环境要求 Centos 7.5.1804 Docker 18.06.1-ce sonatype/nexus3: latest (二)  安装设置 镜像获取 a)      直接输入下面命令,获取最新镜像 docker pull sonatype/nexus3 等命令执行完,可以用 Docker images 查看是否下载完,主要包括镜像名字.版本.镜像ID.大小. 安装 a)     

satis 搭建 Composer 私有库的方法

安装 satis 命令行下执行: php create-project composer/satis --stability=dev --keep-vcs . 配置 创建 satis.json 文件,如官方示例: {"name": "My Repository","homepage": "http://packages.example.org","repositories": [{ "type&q

Dubbo分布式系统架构,持续集成篇 Maven私有库和本地库的安装与配置 Sonatype Nexus + Maven

  环境:CentOS 6.6 Final.JDK7.SonatypeNexus.Maven IP:192.168.4.221 root用户操作 前提:已安装JDK7并配置好了环境变量 1.下载最新版Nexus(本教程使用的是:nexus-2.11.2-03-bundle.tar.gz),下载地址:http://www.sonatype.org/nexus/go/ # wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/n

Maven私有库和本地库的安装与配置 Sonatype Nexus + Maven

环境:CentOS 6.6 Final.JDK7.SonatypeNexus.Maven IP:192.168.4.221 root用户操作 前提:已安装JDK7并配置好了环境变量 1.下载最新版Nexus(本教程使用的是:nexus-2.11.2-03-bundle.tar.gz),下载地址:http://www.sonatype.org/nexus/go/ # wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nex

linux学习:持续集成篇--Maven私有库和本地库的安装与配置-03

如果构建的Maven 项目本地仓库没有对应的依赖包,那么就会去Nexus 私服去下载,那么如果Nexus 私服也没有此依赖包,就回去远程中央仓库下载依赖,Nexus 私服下载成功后再下载至本地Maven 库供项目引用. maven私服器Sonatype Nexus的安装与配置 1.安装 1.1 下载 Nexus(这里使用的是:nexus-2.11.2-03-bundle.tar.gz) http://www.sonatype.org/nexus/go/ 1.2 解压:因为解压后有两个文件夹,所以

maven私有库配置

私有库的配置 协同开发过程中私有库可以为团队提升很大效率,之前我的私有库一直存在问题导致jar包导入异常.现在在这分享一下私有库配置的几个点,可能因为我们学校比较简陋所以配置的比较简单,欢迎大家补充 交流.(maven的配置我就不再写了 之前有写过) 1.maven文件夹里在conf文件里的setting.xml里面添加私有库的地址  内容如下: 2.在项目的pom.xml文件里也是添加私有库的地址,之前就是因为没有添加这个地址导致出现了错误. 这样如果在基本的maven环境配置对的情况下,私有

持续集成篇-Maven私有库和本地库的安装与配置Sonatype Nexus + Maven

持续集成管理平台的组成与工作原理图 如果构建的Maven项目本地仓库没有对应的依赖包,那么就会去Nexus私服去下载, 那么如果Nexus私服也没有此依赖包,就回去远程中央仓库下载依赖, Nexus私服下载成功后再下载至本地Maven库供项目引用. 环境:CentOS 6.6 Final.JDK7.Sonatype Nexus.Maven IP:192.168.103.212 root 用户操作 前提:已安装 JDK7 并配置好了环境变量 1.下载最新版 Nexus(本教程使用的是:nexus-