一、基本介绍

参考:https://www.hangge.com/blog/cache/detail_2844.html

https://blog.csdn.net/zhuguanbo/article/details/129026067 详细

1、为什么搭建私服

  • 如果没有私服,需要的构件都需要通过maven的中央仓库或者第三方的maven仓库下载到本地,而一个团队的所有人都重复的从maven仓库下载构件加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。
  • 项目在内网进行的,可能根本连接不了maven的中央仓库和第三方的maven仓库
  • 开发的公共构件如果需要提供给其他项目使用,也需要搭建私服

2、nexus介绍

Nexus 是一个专门的 Maven 仓库管理软件,它不仅能搭建 Maven 私服,还具备如下一些优点使其日趋成为最流行的 Maven 仓库管理器

  • 提供了强大的仓库管理功能,构件搜索功能
  • 它基于 REST,友好的 UI 是一个 ext.js 的 REST 客户端
  • 它占用较少的内存
  • 基于简单文件系统而非数据库

二、Nexus 服务的安装

Nexus 既可以使用传统的二进制包进行安装,也可以使用 Docker 容器的方式进行安装运行。下面分别介绍这两种方法。

1、使用二进制发行包安装

(1)首先确保系统 JDK 环境

(2)接着我们访问 Nexus 官网(点击访问)进行下载nexus3下载地址

(3)根据环境选择下载相应的版本,比如我这里下载 Linux 版本的安装包



(4)将下载下来的压缩包上传到服务器(比如 /usr/local 目录下),然后进行解压

tar -zxvf nexus-3.21.2-03-unix.tar.gz

(5)解压后会得到两个文件夹:nexus-3.21.2-03(nexus 服务目录)、sonatype-work(私有库目录)



(6)进入 nexus-3.21.2-03 文件夹,其中 etc/nexus-default.properties 文件配置端口(默认为 8081)和 work 目录信息,我们可以按需修改

cd nexus-3.21.2-03
cat etc/nexus-default.properties



(7)然后执行如下命令开放 8081 端口:

firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload

(8)最后执行如下命令启动服务即可:

cd bin
./nexus start

或者使用./nexus run 会直接在控制台输出日志

2、使用 Docker 镜像进行安装

(1)首先执行如下命令下载 Nexus3 镜像

docker pull sonatype/nexus3

(2)接着执行如下命令,创建宿主机挂载目录

mkdir –vp /usr/local/nexus-data

(3)最后执行如下命令运行 Nexus3 容器即可:

docker run -d --name nexus3 -p 8081:8081 -v /usr/local/nexus-data:/var/nexus-data sonatype/nexus3

(4)同样不要忘记执行如下命令开放 8081 端口:

firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload

三、Nexus 服务的配置

(1)Nexus 服务启动以后,我们使用浏览器访问http://IP:8081/ ,点击右上角登录按钮:



(2)首次登录会提示密码保存在 /usr/local/sonatype-work/nexus3/admin.password 文件中,我们查看服务器上这个文件内容,然后作为密码登录:



(3)登录后会让我们设置新的密码(这里我设置为 123)

(4)登录后的界面如下:

(1)默认仓库说明

maven-central:maven中央库,默认从https://repo1.maven.org/maven2/ 拉取jar

maven-releases:私库发行版jar

maven-snapshots:私库快照(调试版本)jar

maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务。在本地maven基础配置setting.xml或项目pom.xml中使用

(2)仓库类型说明:

group:这是一个仓库聚合的概念,用户仓库地址选择group的地址,即可访问group中配置的,用于方便开发人员自己设定的仓库。maven-public就是Group类型的仓库。内部设置了多个仓库,访问顺序取决于配置顺序,3.x默认为Releases、Snapshots6、Central,当然也可以自己设置

hosted:私有仓库,内部项目的发布仓库,专门用来存储我们自己生成的jar文件

snapashots:本地项目的快照仓库,测试版

releases:本地项目的正式版本

proxy:代理类型,从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下

virtual(虚拟类型): 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)

四、创建新用户和新仓库

1.创建用户

可以省略

登陆admin后,可以点击上面的“设置”图标,在“设置”里可以添加用户、角色,对接LDAP等的设置,如下:





创建用户好后,重新登陆创建的用户

2、创建仓库

上面对仓库的概率清楚后,我们开始创建新仓库,主要创建3个仓库

proxy仓库 作用是去远程拉取jar包

hosted仓库 作用是存放本地上传的三方jar包

group仓库 作用是将上面来个放到这个组里,进行统一管理

(1)proxy 代理仓库创建

中央仓库的代理默认为https://repo1.maven.org/maven2/ 我们可以更换成阿里云中央仓库。

http://maven.aliyun.com/nexus/content/groups/public/



(2)hosted 仓库创建

host仓库这里了两种不同的存储类型





(3)group仓库

主要就是把上面三个仓库放到该组里,然后让这个组给外面访问。



全家福来一个

五、项目中使用

1.将jar发送到nexus私服务器

1、创建maven项目

创建一个最简单的maven项目,然后新建一个工具类,用来测试当把它打成jar包放到私服后,其它项目是否能够成功引用。



2、pom.xml

<?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>org.cgy</groupId>
<artifactId>ceshi</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
</dependencies> <distributionManagement>
<repository>
<id>releases</id>
<url>http://192.168.2.7:8081/repository/java-release</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://192.168.2.7:8081/repository/java-snapshot</url>
</snapshotRepository>
</distributionManagement> <build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<!-- 指定jdk -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build> </project>

3、setting.xml配置

在这里只要配置登陆nexus的用户名密码,不然没有用户名和密码怎么能将jar包发送到私服呢。

<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>123</password>
</server> <server>
<id>snapshots</id>
<username>admin</username>
<password>123</password>
</server>
<servers>
  • 注意:maven会判断版本后面是否带了-SNAPSHOT,如果带了就发布到snapshots仓库,否则发布到release仓库。这里我们可以在pom.xml文件中

(4)执行命令:mvn deploy



发现部署到nexus私服成功,我们到私服查看下,因为这里的版本是带SNAPSHOT,所以会发布到snapshots仓库中。

说明已经成功将jar包发布到nexus私服中了。那么下一步是如何引用私服中的jar包了。

2.从nexus引用第三方jar包

让maven项目使用nexus作为远程仓库有两种方式,第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库;另一种是通过修改maven的配置文件settings.xml进行更改,让所有项目都使用nexus仓库。我们这里采取第二种,只需要setting.xml就可以了。还有就是拉取jar的私服仓库地址只要写一个java-group就可以了,因为在创建这个组的时候,里面已经包含了其它三个仓库。

(1)setting.xml完整配置

<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<!--第一个nexus-xu要和下面的mirror中的id一致,代表拉取是也需要进行身份校验-->
<server>
<id>nexus-xu</id>
<username>xuxiaoxiao</username>
<password>xuxiaoxiao113</password>
</server>
<server>
<!--这两个前面讲过,是jar上传时候进行的验证,id对应的是pom中id属性的值-->
<id>releases</id>
<username>xuxiaoxiao</username>
<password>xuxiaoxiao113</password>
</server>
<server>
<id>snapshots</id>
<username>xuxiaoxiao</username>
<password>xuxiaoxiao113</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-xu</id>
<name>internal nexus repository</name>
<!--镜像采用配置好的组的地址-->
<url>http://47.96.44.110:8081/repository/java-group/</url>
<mirrorOf>!internal.repo,*</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<!--ID用来确定该profile的唯一标识-->
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<profile>
<id>nexus-pr</id>
<!-- 远程仓库列表 -->
<repositories>
<repository>
<id>nexus-xu</id>
<name>Nexus Central</name>
<!-- 虚拟的URL形式,指向镜像的URL-->
<url>http://47.96.44.110:8081/repository/java-group/</url>
<layout>default</layout>
<!-- 表示可以从这个仓库下载releases版本的构件-->
<releases>
<enabled>true</enabled>
</releases>
<!-- 表示可以从这个仓库下载snapshot版本的构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件仓库列表 -->
<pluginRepositories>
<pluginRepository>
<id>nexus-xu</id>
<name>Nexus Central</name>
<url>http://47.96.44.110:8081/repository/java-group/</url>
<layout>default</layout>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--需要激活 <profile>中的ID才生效-->
<activeProfile>nexus-pr</activeProfile>
<activeProfile>jdk-1.8</activeProfile>
</activeProfiles>
</settings>

2、验证

(1)新建项目添加pom依赖

    <dependencies>
<dependency>
<groupId>com.jincou</groupId>
<artifactId>xuxiaoxiao</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>

(2)看是否拉取到私服的jar包

并没有报错,表拉取成功

(3)写测试类

引用成功

(4)看后台输出

输出成功

从这里将jar包发送到私服和从私服拉取jar就成功了。

Nexus搭建maven仓库并使用的更多相关文章

  1. 使用nexus搭建maven仓库(本地私服)

    我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...

  2. 使用nexus搭建maven仓库(maven 本地私服)

    我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...

  3. 使用Nexus搭建Maven仓库

    1.目的 通过建立自己的私服,能够减少中央仓库负荷.节省外网宽带.加速maven构建.自己部署构件等,从而高效的使用maven,nexus是当前流行的Maven仓库管理软件. 2.下载nexus 2. ...

  4. nexus 搭建maven本地仓库

    使用Nexus搭建Maven本地仓库   阅读目录 序 Nexus 序 在工作中可能存在有些开发机器不能上网,大量的机器获取jar包会导致公司网络很慢,还有时候公司会自己发布自己的项目版本,其他的项目 ...

  5. Maven-004-使用 Nexus 搭建 maven 私服

    从去年至今,自己一直在学习自动化测试工具,想利用自动化工具尽可能的将重复的.关键的.耗时耗力的工作实现自动化,减轻日常测试工作,提升测试效率.在学习的过程中,将 maven 作为了项目开发管理工具,进 ...

  6. Maven使用笔记(五)Sonatype Nexus 搭建Maven 私服

    1. 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地, 而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载 ...

  7. Maven——使用Nexus搭建Maven私服

    原文:http://www.cnblogs.com/xdp-gacl/p/4068967.html Maven学习总结(九)--使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要 ...

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

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(九)——使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目 ...

  9. Maven学习二:使用Nexus搭建Maven私服及相关配置

    处于安全等原因的考虑,一些企业内部网络是不允许访问外部网络的,但是项目内部搭建的项目又是Maven架构,这样就需要企业在内部网络中搭建自己的Maven仓库服务,再者一些大型企业或者内部模块化组件化划分 ...

  10. 使用Nexus搭建Maven私服问题总结

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

随机推荐

  1. 一篇文章带你详细了解axios的封装

    axios 封装 对请求的封装在实际项目中是十分必要的,它可以让我们统一处理 http 请求.比如做一些拦截,处理一些错误等.本篇文章将详细介绍如何封装 axios 请求,具体实现的功能如下 基本配置 ...

  2. Microsoft R 和 Open Source R,哪一个才最适合你?

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. R 是一个开源统计软件,在分析领域普及的非常快. 在过去几年中,无论业务规模如何,很多公司都采 ...

  3. 前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮

    前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin? ...

  4. 完美决解win10 可以上网却显示无internet的bug

    试过网上的几乎所有方法,例如禁用复用网卡.网络重置.禁用复用服务,也用了用修改注册表下HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcPa ...

  5. .NET EF查询需要注意的点

    记录下在公司中混乱使用跟踪和非跟踪查询的坑. var blog = context.Blogs.Single(b => b.BlogId == 1); // 查询时放回一条 如果存在多条引发异常 ...

  6. 园子的商业化努力:欢迎参加DataFun联合行行AI举办的数据智能创新与实践人工智能大会

    大家好,今年是园子商业化生死攸关的一年,正在艰难而努力地向前推进,今天在首页发布一篇大会推广博文,望谅解. DataFun联合行行AI举办第四届"数据智能创新与实践人工智能大会", ...

  7. Visual Studio Code调试和发布ASP.NET Core Web应用

    前言 上一篇文章主要讲了Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用有兴趣的同学可以去看看,今天咱们主要是要讲讲如何在VS Code中调试和发布AS ...

  8. 【爬虫案例】用Python爬取知乎热榜数据!

    目录 一.爬取目标 二.编写爬虫代码 三.同步讲解视频 3.1 代码演示视频 3.2 详细讲解视频 四.获取完整源码 一.爬取目标 您好,我是@马哥python说,一名10年程序猿. 本次爬取的目标是 ...

  9. 十大功能特性,助力开发者玩转API Explorer

    摘要:华为云API Explorer为开发者提供一站式API解决方案统一平台,集成华为云服务所有开放API,支持全量快速检索.可视化调试.帮助文档.代码示例等能力,帮助开发者快速查找.学习API和使用 ...

  10. PHP递归和循环的速度测试

    本文于 2017-12-05 重新整理. 写了一个可以对 $_GET, $_POST 等输入进行过滤的函数,递归实现如下: function array_map_recursive($filters, ...