linux下搭建maven私服

2023-05-16

maven私服我相信很多公司都有,私服的好处有以下几点:
1、 节省下载资源开销。jar包(不一定是jar,也可以是其他资源)都存在私服,可以不必每次下载都去远程仓库去下载,因为有的远程仓库确实下载很慢。
2、 自定义jar包。每个公司都有自己的jar包资源,这些明显是在远程仓库搜索不到的,而搭建私服,就可以将自定义jar包放到私服,公司的同事就可以从私服下载。
3、 私服是自己的,自己的东西好管理!

1、环境安装

1.1、安装jdk

参考文章:https://blog.csdn.net/liu1160848595/article/details/102838318

1.2、安装maven

linux下安装maven步骤非常简单,总结起来就三步:下载安装包、解压、配置环境变量

  1. 下载安装包,官网下载地址:http://maven.apache.org/download.cgi
    此处我下载了当前最新版本:3.6.3
[guansheng@lgs maven]$ wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  1. 解压安装包到指定目录
#当前用户权限不够,所以索性直接用sudo权限解压
[guansheng@lgs maven]$ sudo tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/software/maven/

可以看到解压目录下的文件结构如下:
maven解压目录结构
3. 配置环境变量
在 /etc/profile文件中加入以下代码:

MAVEN_HOME=/usr/software/maven/apache-maven-3.6.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

maven环境变量配置
其中MAVEN_HOME的值就是maven的解压之后的目录
保存文件,并运行source /etc/profile使环境变量生效

[root@lgs apache-maven-3.6.3]# source /etc/profile
  1. 检查是否安装成功
    运行mvn -v查看maven版本
[root@lgs apache-maven-3.6.3]# mvn -v

看到以下结果则证明安装成功了
maven安装成功

1.3、安装nexus

nexus工具是此次maven私服的构建工具,所以也要安装好。
nexus的安装也很简单,下载、解压、修改配置文件就可以访问了

  1. 下载nexus
    官网地址:https://www.sonatype.com/download-oss-sonatype
    linux系统下载unix版本的就可以。
    官网可以下载最新版,但是下载速度简直慢得令人发指,最后不知道到哪个角落翻到一篇文章里说用某雷下载比较快,就试了一下,果然很快,如果下载很慢可以用!
    题外话不多说,假设你的网速很快,那可以执行以下命令下载最新安装包:
[root@lgs nexus]# wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz

我是下载到本地,然后上传到服务器的:

#用rz命令上传,前提是已经安装了rz命令
[root@lgs nexus]# rz -by
  1. 解压安装包到指定文件夹
[root@lgs nexus]# tar -zxvf latest-unix.tar.gz -C /usr/software/nexus/

解压后有两个文件夹,前面那个是功能的实现,后面那个文件夹负责存储数据,也就是构件(jar包之类的资源),如下所示:
nexus解压目录
我们操作第一个文件夹即可。
3. 修改配置
如果机器够好的话,可以使用默认配置就可以了,我的服务器配置不高,所以改一下虚拟机配置:

[root@lgs bin]# vim nexus-3.21.1-01/bin/nexus.vmoptions

将启动内存和最大内存都改为1G
修改虚拟机配置

  1. 启动nexus
[root@lgs nexus-3.21.1-01]# ./bin/nexus start

此时会有一个警告,意思是不推荐用root用户启动,不过此警告不影响使用,可以不管
启动nexus
此时可以直接访问了:http://192.168.252.128:8081/
访问nexus
5. 说明

  1. Nexus默认的端口是8081,可以在sonatype-work/nexus3/etc/nexus.properties中修改
  2. 右上角那个登录会有一个默认的admin账号,初始密码保存在/usr/software/nexus/sonatype-work/nexus3/admin.password文件中,登录进去会让你重置密码。

2、搭建maven私服

2.1、说明

进入到nexus界面,点击repositories可以看到以下界面:
repositories
下面是网上摘抄的一些关于上面名词的说明:

  1. component name的一些说明:
    1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
    2)maven-releases:私库发行版jar
    3)maven-snapshots:私库快照(调试版本)jar
    4)maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。
  2. Nexus默认的仓库类型有以下四种:
    1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;
    2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);
    3)proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);
    4)virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);
  3. Policy(策略):表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库;
  4. Public Repositories下的仓库
    1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
    2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
    3)Central: 用来代理maven中央仓库中发布版本构件的仓库
    4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
    5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
    6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
    7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本
    所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。

2.2、构建思路

首先要明白我们从私服上拉取的jar包的来源,既然是私服,那肯定少不了自定义的jar包,这些jar包是在宿主仓库,也就是hosted类型的仓库,除此之外还有其他的jar包,需要从远程仓库下载,也就是proxy代理类型的仓库。既然来源有多个,我们为了方便,通常会创建一个group,也就是组类型的仓库,将宿主类型和代理类型的包含进去,我们只需要访问组仓库即可,至于组内是先从hosted中拉取还是先从proxy中拉取,就要看创建组仓库时候配置的属性了,下面会有介绍:
maven拉取jar包过程
为了安全性,我们还可以新建一个user共外部访问,按需分配角色。

2.3、搭建步骤

按照上面的思路,开始创建一个user和一个hosted仓库、proxy仓库和group仓库

2.3.1、创建用户

创建用户
填上必要的信息以及授权
新增账户
点击创建之后,可以在用户列表中看到新建的用户
新建用户列表

2.3.2、创建文件保存目录

创建仓库之前,可以先创建数据文件的保存目录
创建文件保存目录
同样填上必要信息
创建数据存储目录

2.3.3、创建Proxy Repository(代理仓库)

创建仓库
选择maven2(proxy)
选择maven2(proxy)
配置仓库属性
配置仓库属性
注意:
代理仓库可以建多个,用来指定多个远程仓库地址,比如除了maven仓库地址还可以指定阿里云的仓库地址,在国内的话,最好是阿里云的地址在前,其他的排后面(在组仓库里可以指定成员和其顺序)

2.3.4、创建hosted reposity(宿主仓库)

选择maven2(hosted)
选择maven2(hosted)
指定文件存储目录
指定文件存储目录

2.3.5、创建group reposity(组仓库)

选择maven2(group)
选择maven2(group)
指定组仓库成员
*组成员及顺序
仓库建完成之后,可以在Repositories列表中查看新建的仓库
新建的仓库

3、使用maven私服

以上步骤把私服的环境已经搭建好,接下来就是使用搭建好的私服。

3.1、创建maven工程

首先创建一个使用maven的工程,为了方便,我就直接用idea创建一个springboot工程
具体过程不赘述,创建好的工程如下:
mavenDemo工程

3.2、修改setting.xml

在settings.xml文件中,修改如下配置:

<!--新建一个本地仓库地址,用来测试在本地没有jar包的情况下,私服上面jar包下载情况-->
<localRepository>C:\Users\Admin\.m2\repository-demo</localRepository>
<!--nexus服务器-->
<servers>
   <server>  
       <id>nexus</id>  
       <username>lgs</username>  
       <password>lgs用户的密码</password>  
   </server>   
</servers>
<!--私服仓库镜像-->
<mirrors>
	<mirror>  
        <id>nexus</id>  
        <name>nexus repository</name>  
        <url>http://192.168.252.128:8081/repository/lgs-reposity-group/</url>  
        <mirrorOf>central</mirrorOf>  
    </mirror> 
</mirrors>

上面的私服仓库镜像的url在下面所示的位置,直接粘贴即可:
私服镜像url
修改settings.xml之后,使此文件生效,我的是idea,在切换回idea之后,配置文件已经生效,因为这份文件指定的本地仓库是新建的一个文件夹,里面是空的,所以idea在疯狂地下载springboot的一些依赖包,再进入控制台,搜索spring,可以发现私服上面也已经下载了很多依赖包了:
下载好依赖包
此时,jar包的下载功能是没问题的,但是既然是私服,那肯定是需要上传自定义jar包的,不然就意义不大了。

4、上传jar包

上传jar包之前需要将宿主仓库的上传权限打开,默认是关闭的:
打开上传权限

4.1、控制台上传

我用的是nexus3,在控制台上有jar包的上传位置(据说nexus2也有):
上传文件
上传界面:
上传jar包
测试上传所用的jar包,我是直接把我新建的springboot工程打包丢上去的。
再搜索一下上传的jar包的名字,可以看到已经上传成功了:
上传成功
点进去还可以看到详情
jar包详情
那么现在我们就在项目中引用自定义的jar包试试:
进入jar包详情
将下面的依赖引入到项目中:
jar包依赖
我就把这个jar包引用到demo项目中的,好像没规定不能在项目中引用自己打的jar包:
引用自定义jar包
可以看到,jar包已经下载下来了,而且已经加入到依赖中了:
jar包已加入依赖

4.2、命令上传

这是通过控制台直接上传jar包,也可以通过命令上传,前提是要上传的机器已经安装好了maven。

  1. 添加配置
    在maven安装目录/conf/settings.xml下添加账号密码配置:
    id是为了标识这个server,可自定义(记住,下面命令要用到)。
<server>  
     <id>lgs-nexus-releases</id>  
     <username>admin</username>  
     <password>密码</password>  
</server>
  1. 执行命令
mvn deploy:deploy-file -DgroupId=com.example -DartifactId=demo -Dversion=1.0.1 -Dpackaging=jar -Dfile=D:\STLWorkspace\workspace\mavenDemo\target\demo-0.0.1-SNAPSHOT.jar -Durl=http://192.168.252.128:8081/repository/lgs-reposity-hosted/ -DrepositoryId=lgs-nexus-releases

参数解释:
-DgroupId,-DartifactId,-Dversion三个参数对应jar包的三个参数,也就是在pom文件中依赖的时候需要的三个参数,可以自定义写
-Dpackaging:打包类型
-Dfile: jar包位置
-Durl: 私服仓库地址
-DrepositoryId: 要上传的服务id,这个id就是上面配置的server的id
上面这些参数都是和控制台里的那些选择对应好的,很容易理解。

看到以下提示就成功了:
上传成功
搜索一下,可以看到刚刚上传的1.0.1版本的jar包显示在了列表中:
命令上传成功
至此,maven私服的搭建以及使用都已完成!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下搭建maven私服 的相关文章

  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 使用 testng 和 maven 运行不同的测试套件

    我使用 TestNg 和 Maven 以及 Surefire 插件来运行我的测试 我有几个不同的组件 我希望能够使用相同的 pom xml 在不同时间运行它们 目前 为了做到这一点 我有几个不同的 XML 文件定义了一个测试套件 并且我设置
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • Intellij - 调试器断点不再工作

    我正在正常工作 调试Java Maven项目与IntelliJ 2018 2 1 然后我单击 Intellij 停止应用程序以对代码进行一些修改 当我在调试模式下再次启动应用程序时 它 调试器 只是停止工作 现在 应用程序需要大约 10 2
  • 自动生成/删除詹金斯工作

    我正在寻找一种自动创建一组詹金斯作业的方法 通常在创建新的 git 分支之后 我已经为maven尝试过这个插件 http evgeny goldin com wiki Maven jenkins plugin http evgeny gol
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • M2e 未找到丢失的存储库 - m2e eclipse 插件

    当我将鼠标悬停在 Eclipse 中未找到的包上并单击 搜索存储库 时 未找到我正在搜索的依赖项 依赖关系存在于官方 Maven 存储库中 http search maven org remotecontent filepath javax
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何在发布期间复制未版本化的测试资源:执行?

    我的问题与 Maven 在发布时不会复制未跟踪的资源 https stackoverflow com questions 10378708 maven doesnt copy untracked resources while releas

随机推荐

  • Java支付宝沙箱环境支付,官方Demo远程调试【内网穿透】

    文章目录 1 下载当面付demo2 修改配置文件3 打包成web服务4 局域网测试5 内网穿透6 测试公网访问7 配置二级子域名8 测试使用固定二级子域名访问 在沙箱环境调试支付SDK的时候 xff0c 往往沙箱环境部署在本地 xff0c
  • opencv内存不足问题(OpenCV Error: Insufficient memory)

    最近在用opencv自带的函数haartraining训练分类器 xff0c 之前用的图片是20 20 xff0c 能训练出分类器 xff0c 后来换成了80 86 xff0c 就报错了 xff0c 报的错误是内存不足 xff0c 于是 x
  • ffmpeg 4.2.2 实现mp4转avi(修改官方remuxing例子)

    最近想把ffmpeg官方例子过一遍 xff0c 达到初步了解ffmpeg的目的 xff0c 本文只是给自己一个记录 xff0c 也是在网上没有找到一样的文章 xff0c 发出来供大家指点 直接使用官方demo xff0c 把mp4转换成av
  • 12.bss段的初始化

    12 bss段的初始化 在C代码 xff1a 有初始化全局的数据段 xff0c 局部的栈 xff0c malloc部分的堆 xff0c 未初始化的全局的bss段 从上面的编译的信息知道 xff1a Bss段的起始地址 xff1a 00010
  • pandas学习之df.rename()

    pandas学习之df rename df rename 用于更改行列的标签 xff0c 即行列的索引 可以传入一个字典或者一个函数 在数据预处理中 xff0c 比较常用 官方文档 xff1a DataFrame rename self m
  • java8操作两个集合List

    public static void main String args List lt String gt list1 61 new ArrayList lt String gt list1 add 34 1 34 list1 add 34
  • Atcoder AGC005 题解

    A STring 用类似括号匹配的方法搞一下即可 span class token macro property span class token directive keyword include span span class toke
  • CentOS-7安装桌面环境

    CentOS 7安装桌面环境 CentOS 7安装桌面环境 CentOS 7安装Server with GUI 设置为开机从桌面环境启动 yum y group install 39 Server with GUI 39 systemctl
  • [软件注册]Sublime 3 激活/注册码(key)

    偶然发现了一种sublime激活方式 使用的sublime3 1 1版本 亲试有效 Step1 配置 host文件 推荐使用 switchhost软件 可以快速变更host span class hljs number 127 0 span
  • 测试git能否连接github

    welcome to my blog 使用以下命令进行测试 ssh T git 64 github com 出现报错 ssh dispatch run fatal Connection to 13 250 177 223 port 22 S
  • vtk中实现3D模型(读取文件)

    xff08 xff09 VTK 坐标系统及空间变换 窗口 视图分割 mb5fed73533dfa9的技术博客 51CTO博客 VTK学习 xff08 三 xff09 VTK读取序列图像 灰信网 xff08 软件开发博客聚合 xff09 读取
  • centos中安装Python2.7

    转载于 xff1a 秋水逸冰 CentOS 6 8安装Python2 7 13 查看当前系统中的 Python 版本 python version 返回 Python 2 6 6 为正常 检查 CentOS 版本 cat etc redha
  • 安装tar.gz文件(无configure文件)

    如何安装tar gz文件 xff08 以webstorm为例 xff09 1 获取root权限并输入密码 xff1a su root 2 进入有该文件的目录下 xff08 以我的为例 xff0c 具体看你的文件在哪里 xff09 cd 下载
  • 游戏服务端框架之业务线程模型

    请求消息绑定线程策略的选择 在上一篇文章中 我们看到 消息是直接在网络框架的io线程中处理的 这样做有一个非常严重的缺陷 如果业务处理比较耗时 那么io线程接受消息的速度就会下降 严重影响io的吞吐量 典型的 我们应该另起线程池 专门用于异
  • 在WSL中使用GPU:WSL2 + Ubuntu 18.04 + CUDA + Gnome图形界面环境配置

    目录 引言1 确认Windows 10版本2 在Windows上安装WSL23 在Windows上安装CUDA on WSL驱动4 在WSL2中安装CUDA Toolkit3 测试CUDA是否能在WSL2中运作4 安装Gnome图形界面其他
  • Centos 开启路由转发实现全网互通

    只需在RouterSrv网关服务器上开启路由转发功能即可 root 64 RouterSrv vi etc sysctl conf net ipv4 ip forward 61 1 添加此行即可 root 64 localhost sysc
  • 虚拟机中配置外网环境

    文章目录 在虚拟机中配置外网环境 在虚拟机中配置外网环境 主机为 win10 xff0c 虚拟机中为 ubuntu 系统 xff0c 采用clash 1 xff0c 设置 Allow Lan xff0c 允许局域网访问 2 xff0c 虚拟
  • mysql 操作数据库(备份与恢复)

    一 直接把创建数据库的语句放到sql 文件中 xff1a php 写法 xff1a lt php mysql port 61 get mysql port cmd 61 US MYSQL BIN 34 mysql exe port 61 3
  • Go调用Python by go-python3

    确保python版本为3 7 conda create go python span class token assign left variable python span span class token operator 61 spa
  • linux下搭建maven私服

    maven私服我相信很多公司都有 xff0c 私服的好处有以下几点 xff1a 1 节省下载资源开销 jar包 xff08 不一定是jar xff0c 也可以是其他资源 xff09 都存在私服 xff0c 可以不必每次下载都去远程仓库去下载