Nexus - 基于docker搭建Maven私服

  • 1 关于Nexus和Maven
    • 1.1 Nexus
    • 1.2 Maven
  • 2. 部署Nexus
    • 2.1 启动nexus
    • 2.2 登录nexus
    • 2.3 Nexus中仓库的分类
    • 2.4 创建仓库
    • 2.5 配置仓库组(maven-public)
    • 2.6 本地Maven从nexus下载构件(两种方式)
      • 1 配置pom.xml的方式
      • 2 配置镜像的方式
    • 2.7 本地构件发布到nexus(可以用做jenkins构建的版本管理)
      • 1 使用maven部署构件到nexus私服
      • 2 手动部署第三方构件到nexus私服
      • 3. jar包和war包的区别

1 关于Nexus和Maven

1.1 Nexus

Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven仓库管理器”。

Maven 私服其实并不是 Maven 的核心概念,它仅仅是一种衍生出来的特殊的仓库,但这并不代表它不重要,相反由于私服具有降低中央仓库负荷、节省外网带宽、以及提高项目稳定性等优点,使得私服在实际开发过程中得到了相当普遍地使用。

能够帮助我们建立私服的软件被称为 Maven 仓库管理器,主要有以下 3 种:

  • Apache Archiva
  • JFrog Artifactory
  • Sonatype Nexus

其中,Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

Nexus 开源版具有以下特性:

占用内存小(28 M 左右)
具有基于 ExtJs 得操作界面,用户体验较好
使用基于 Restlet 的完全 REST API
支持代理仓库、宿主仓库和仓库组
基于文件系统,不需要依赖数据库
支持仓库索引以及搜索
支持在界面上上传构件
安全控制

1.2 Maven

参考 Maven
Maven是一个项目管理工具,它包含了

  • 一个项目对象模型 (Project Object Model)
  • 一组标准集合
  • 一个项目生命周期(Project Lifecycle)
  • 一个依赖管理系统(Dependency Management System)
  • 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件

Maven用途

  • a) 优秀的构建工具
    通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程
  • b) 依赖管理工具
    项目依赖的第三方的开源类库,都可以通过依赖的方式引入到项目中来
  • c) 项目信息管理工具
    能够管理项目描述、开发者列表、版本控制系统地址、许可证等一些比较零散的项目信息

Maven帮助我们解决的问题

1.构建工程
2.管理jar
3.编译代码
4.自动运行单元测试
5.打包
6.生成报表
7.部署项目,生成web站点

Maven项目是啥?

我们这样来理解maven项目,就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包 就像在蜜汁鸡外面裹了一层面粉油炸一下变成了炸鸡,但是他还是一只鸡

Maven和nexus关系
Nexus仅仅是私服的一种

当Maven根据坐标寻找构件时,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven会去远程仓库查找(默认找的是中央仓库),发现需要的构件之后,下载到本地仓库再使用。

在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。

使用maven私服的好处

  • 节省自己的外网带宽:利用私服代理外部仓库后,对外的重复构件下载得以消除,即降低外网带宽的压力。
  • 加速maven的构建:Maven的一些内部机制(如快照检测)要求Maven在执行构建的时候不停地检查远程仓库的数据。
  • 部署第三方构建
  • 提高稳定性,增强控制:私服后即使暂时没有Internet连接Maven也可以正常运行,因为私服中缓存了大量的构件
  • 降低中央仓库的负荷:数百万的请求,存储数T的数据,需要相相当大的财力。使用私服可以避免很多对中央仓库的重复请求。

2. 部署Nexus

2.1 启动nexus

docker pull sonatype/nexus3      #从dockerhub拉取nexus3镜像
mkdir -vp /server/docker/nexus/nexus-data
chmod 777 /server/docker/nexus/nexus-data
docker run -p 8081:8081 --name nexus \-v /server/docker/nexus/nexus-data:/nexus-data \-v /etc/localtime:/etc/localtime:ro \--restart=always \-itd sonatype/nexus3

如果是在虚拟机部署,内存不足,可以使用如下命令

[root@nexus-254 ~]# docker run -d --restart=always --name=nexus3 -p8081:8081 --privileged=true -e INSTALL4J_ADD_VM_PARAMS="-Xms512M -Xmx512M -XX:MaxDirectMemorySize=512M" -v /docker/nexus:/var/nexus-data sonatype/nexus3

2.2 登录nexus

浏览器中打开http://192.168.70.249:8081/

点击上图右上角的 Sign in ,输入用户名和密码,nexus默认用户名是 admin,密码是第一次启动的时候生成的,密码位于下面的文件中:安装目录/nexus-data/admin.password。

[root@nexus-254 ~]# docker exec -it 29b /bin/bash
bash-4.4$ cat /nexus-data/admin.password
4365bede-84f4-47dc-b2aa-a36e3e3453c9

登录成功后,即提示修改密码,按照指示修改即可

2.3 Nexus中仓库的分类

nexus中有个默认自带的仓库列表,里面包含了各种各样的仓库。
这些仓库主要分为三类,代理仓库、宿主仓库和仓库组。

  • 代理仓库:代理仓库主要是让使用者通过代理仓库来间接访问外部的第三方远程仓库的。代理仓库会从被代理的仓库中下载构件,缓存在代理仓库中以供maven用户使用。

  • 宿主仓库: 宿主仓库主要是给我们自己用的,主要有2点作用:
        - 将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用
        - 将自己开发好的一些构件发布到nexus的宿主仓库中以供其他同事使用。

  • 仓库组:(默认maven-public)仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接地访问这个组内所有的仓库,仓库组中多个仓库是有顺序的,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。仓库组内部实际上是没有构件内容的,他只是起到一个请求转发的作用,将maven用户下载构件的请求转发给组内的其他仓库处理。

2.4 创建仓库

Nexus仓库列表中点击create repository按钮

我们创建一个maven代理仓库:选择"maven2(proxy)",输入远程仓库信息:(阿里云仓库)

  • 第一个红框中输入仓库名称:maven-aliyun
  • 第二个红框选择:Release,表示从这个仓库中下载稳定版的构件
  • 第三个红框输入阿里云仓库地址:https://maven.aliyun.com/repository/public

点击底部的create repository按钮,创建完成。

2.5 配置仓库组(maven-public)


URL:本地的maven可以通过这个url来从仓库组中下载构件至本地仓库。
Group Members:仓库组成员,第1个是宿主的release版本仓库,第2个是宿主的快照版本仓库,第3个是代理仓库(maven社区中央仓库的代理)
#可以将新增的maven-aliyun加入仓库组,放到第3个位置,这个仓库的速度比maven-central要快一些,能加速我们下载maven构件的速度。

2.6 本地Maven从nexus下载构件(两种方式)

获取仓库组对外的地址,点击下图中的 copy 按钮,获取仓库组的地址。

1 配置pom.xml的方式

配置pom.xml的方式跟配置远程仓库类似,把远程仓库的URL改成仓库组的URL。不同的是登录私服需要账户密码,可以在maven配置文件settings.xml中加入以下内容:

<servers><server><id>maven-public</id><username>admin</username><password>Newm123@</password></server><server><id>maven-releases</id><username>admin</username><password>Newm123@</password></server><server><id>maven-snapshots</id><username>admin</username><password>Newm123@</password></server>
</servers>

配置完成后,进入项目目录,执行 mvn complie 命令

2 配置镜像的方式

修改Maven配置文件settings.xml,加入以下内容:

<mirrors><mirror><id>maven-public</id><name>maven public</name><url>http://192.168.17.133:8081/repository/maven-public/</url><mirrorOf>*</mirrorOf></mirror><mirror><id>maven-releases</id><name>maven relesases</name><url>http://192.168.17.133:8081/repository/maven-releases/</url><mirrorOf>*</mirrorOf></mirror><mirror><id>maven-snapshots</id><name>maven snapshot</name><url>http://192.168.17.133:8081/repository/maven-snapshots/</url><mirrorOf>*</mirrorOf></mirror>
</mirrors>

上面mirror配置的*,说明远程仓库都通过该镜像下载构件,url是仓库组的地址

配置完成后,进入项目目录,执行 mvn complie 命令,就可以从nexus下载构件了。

2.7 本地构件发布到nexus(可以用做jenkins构建的版本管理)

常用的有两种方式:

  • 使用maven部署构件到nexus私服
  • 手动部署第三方构件到nexus私服

1 使用maven部署构件到nexus私服

修改pom.xml配置,加入以下内容:

<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>MyJava</artifactId><packaging>war</packaging><version>${project.release.version}</version><name>MyJava Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!--根据个人需要自己修改--><source>11</source><target>11</target><webResources><resource><directory>src/main/webapp</directory><targetPath>/</targetPath></resource></webResources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.4.3</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></build>
<!--<properties><project.release.version>0.1-SNAPSHOT</project.release.version></properties>
--><profiles><profile><id>maven-releases</id><properties><project.release.version>0.1</project.release.version></properties></profile></profiles><distributionManagement><repository>    <!-- release 版本上传用的仓库 --><id>maven-releases</id>  <!-- server 的 id --><url>http://192.168.17.133:8081/repository/maven-releases/</url>  <!-- 仓库的 URL --></repository><snapshotRepository>   <!-- snapshot 版本上传用的仓库 --><id>maven-snapshots</id><url>http://192.168.17.133:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement></project>

修改Maven配置文件settings.xml,加入以下内容:

<mirrors><mirror><id>maven-public</id><name>maven public</name><url>http://192.168.17.133:8081/repository/maven-public/</url><mirrorOf>*</mirrorOf></mirror><mirror><id>maven-releases</id><name>maven relesases</name><url>http://192.168.17.133:8081/repository/maven-releases/</url><mirrorOf>*</mirrorOf></mirror><mirror><id>maven-snapshots</id><name>maven snapshot</name><url>http://192.168.17.133:8081/repository/maven-snapshots/</url><mirrorOf>*</mirrorOf></mirror>
</mirrors>
<servers><server><id>maven-public</id><username>admin</username><password>Newm123@</password></server><server><id>maven-releases</id><username>admin</username><password>Newm123@</password></server><server><id>maven-snapshots</id><username>admin</username><password>Newm123@</password></server>
</servers>

修改完成后,执行mvn deploy 命令,执行这个命令的时候,会对构件进行打包,然后上传到私服中

访问私服快照版本仓库地址:http://192.168.70.249:8082/repository/maven-snapshots/
点击browse连接,就可以看见上传成功了

如果其他同事需要使用上面这个构件,只需要点击下图中的pom文件,右边会显示构件的坐标,然后可以拿去使用了,如下图:

注意:snapshot属于快照版本,同一个snapshot版本的构件可以重复部署到私服中,如果私服中已经存在了则会进行覆盖掉,而release是稳定版本的构件,重复部署会报错。

2 手动部署第三方构件到nexus私服

手动上传只支持发布稳定版本的构件,操作如下:

图中第一行 maven-releases 宿主仓库就是存放用户自己构件的仓库,点击上图中列表中的第一行,进入上传页面,如下图:

上面页面中点击 Browse 选择本地的构件,然后输入其他坐标信息,点击 Upload 完成上传操作。

访问http://10.48.14.50:8082/#brose/browse:maven-releases,可以看到上传好的构件,如下图:

3. jar包和war包的区别

主要体现在文件扩展名、目的和运作方式、文件结构这几个方面。jar包扩展名为.jar,war包扩展名为.war;jar包可打包多个文件,以便用于库、插件或任何类型的应用程序,war包仅用于web应用程序,即web项目;jar包里没有静态资源的文件,war包里有。

Nexus - 基于docker搭建Maven私服相关推荐

  1. Docker搭建Maven私服和Gitlab

    目录 一.安装Maven私服Sonatype Nexus 二.安装Gitlab 一.安装Maven私服Sonatype Nexus 1.下载镜像 [root@localhost ~]# docker ...

  2. 使用Nexus搭建Maven私服流程

    本文作者:蓝雄威,叩丁狼高级讲师.原创文章,转载请注明出处. 一.Nexus 详细介绍: Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问.利用Nexus你 ...

  3. 使用Nexus搭建Maven私服教程(附:nexus上传、下载教程)

    一.基本介绍(Nexus(maven私服)) 1,如果没有搭建私服会有什么问题? 如果没有私服,我们所需的所有构件都需要通过 Maven 的中央仓库或者第三方的 Maven 仓库下载到本地,而一个团队 ...

  4. 【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件

    文章目录 Nexus是什么 Nexus下载和安装 1. 进入 Nexus 2.x 下载页面,根据本机操作系统,选择对应的版本进行下载,如下图所示. 2. 将下载 Nexus 安装包解压到本地磁盘,可获 ...

  5. linux设置nexus开机自启动_在linux中使用nexus搭建maven私服

    首先介绍下为什么要搭建maven私服,简单点说就是就是把项目工程中的Jar包放在一个服务器上,每次Jar包的修改都能去私服上面Down到本地.可以对整个项目组的人形成一个统一的管理. 2.下载完之后就 ...

  6. 如何使用Nexus搭建Maven私服

    如何使用Nexus搭建Maven私服 转载于:https://www.cnblogs.com/valuestack/p/nexus-and-maven.html

  7. Maven学习总结(九)——使用Nexus搭建Maven私服

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(九)--使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很 ...

  8. Maven学习 使用Nexus搭建Maven私服(转)

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  9. Maven学习-使用Nexus搭建Maven私服

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

最新文章

  1. Linux常用命令的简单实用
  2. 买得嗨更要聊得嗨 阿里通免费电话惠战双11
  3. 【精品】【分享】盖茨留给职场工作者的十句警告
  4. Python面向对象2:类与对象的成员分析及self
  5. Python 实现有道翻译命令行版
  6. 如何掌握“所有”的程序语言?没错,就是所有!
  7. 用铁丝做“电路板”,这波操作你不得不服!
  8. SpringBoot、mysql配置PageHelper插件
  9. sublime编辑python_在没有安装Python的前提下,让Sublime text编辑器来运行Py?
  10. Axios 作弊表(Cheat Sheet)
  11. 测量怎么显示坐标_全站仪坐标放样究竟如何操作?
  12. mysql避免死锁的方法
  13. 网络工程师成长日记368-榆林通信大楼项目回忆录
  14. iOS手势识别的工作原理
  15. 可道云访问服务器其他文件,可道云怎么用_可道云使用功能解析
  16. 在Windows系统下,手把手教你制作属于自己的星际译王词典
  17. python+opencv实现相似图片的搜索
  18. thinkpad T480安装WIN7
  19. 2021年网易云音乐实时计算平台发展和挑战
  20. elo匹配算法c语言,匹配算法全面解析:采用国际通用“ELO等级分系统”

热门文章

  1. Android高仿微信/支付宝 扫一扫(弱光检测扫一扫自动放大功能)
  2. goreplay(gor) golang 流量拷贝工具试用
  3. MSP430-GRACE 实战(二):按键中断
  4. 技术研发人员书籍推荐
  5. 为什么我的话总没说服力
  6. pbootcms响应式集团企业通用网站模板
  7. realm教程 android,Realm for Android基本教程
  8. 澳大利亚规模领先的鞋业公司与Boomi合作以加快电子商务和转型步伐
  9. C语言里字符串的解析
  10. B2C网站设计中微交互研究