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私服 的相关文章

  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • maven-bundle-plugin 的输出目录

    我有这个生成 osgi 包的 POM 文件
  • 编译致命错误:目标版本无效:1.8 -> [帮助 1]

    与发布的问题类似的问题无效目标版本 1 7 https stackoverflow com questions 19891423 invalid target release 1 7但关注博客后我的问题仍然没有解决 无法在项目 hm app
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do

随机推荐

  • 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 可以不必每次下载都去远程仓库去下载