什么是 Maven
Maven这个单词来自于意第绪语(犹太语),意为知识的积累。
Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
![image-20231012185156573](https://i-blog.csdnimg.cn/blog_migrate/fecb716f0463f2ffa285dde5b205d85e.png)
Maven 发展史
Maven 的体系结构
为什么要搭建私服
- 本地缓存和提高构建速度:Maven 私服可以缓存远程仓库中的依赖项,当项目构建时,首先检查私服是否已经下载过所需的依赖项,如果有,则直接从私服获取,从而减少了对远程仓库的依赖和下载时间,提高了构建的速度。
- 离线构建支持:Maven 私服允许在没有互联网连接的环境下进行构建。通过在私服中缓存所需的依赖项,可以在没有网络连接时继续构建项目。
- 安全性和稳定性:搭建私服可以确保项目所依赖的库和框架的稳定性和安全性。由于私服可以控制哪些库和版本可用,可以避免项目意外依赖于不受信任的或不稳定的库。
- 本地定制和部署:私服允许你发布和管理自己的构建产物。你可以将自己的库、框架或插件发布到私服中,并在项目中引用和使用它们。这样可以更好地管理和共享项目内部的共享组件。
- 统一管理和团队协作:搭建私服可以集中管理团队或组织内部使用的共享库和构建产物。团队成员可以从私服中获取所需的依赖项,确保使用的是统一的版本和配置,以提高团队协作和项目的一致性。
众所周知国内有非常强大的防火墙,所以从外网拉取依赖异常艰难。
虽然国内有阿里云公共仓库,但是也有一些依赖不存在阿里云仓库中或仓库有时候连接不上。
这时候 Maven 私服的重要性就体现出来了。
如何搭建 Maven 私服
下载安装
下载 Nexus
访问官网: https://help.sonatype.com/repomanager3/product-information/download
创建文件夹 nexus
解压压缩包
如果是 Windows 上下载的,上传压缩包到 nexus 文件夹。
tar -zxvf <压缩包名称>
配置 Nexus
进入 nexus-3.61.0-02/bin
文件夹下
编辑nexus.vmoptions
文件
根据自己机器内存大小,适当配置内存。内存太小会启动 Nexus 会失败,最好将-Xms
和-Xmx
的值调整相同
。
我是16G的运行内存,所以我把-Xms
和-Xmx
设置成了4096m
,MaxDirectMemorySize
设置成了5120m
。
-Xms
和-Xmx
是两个常用的 JVM 参数,用于指定初始堆大小(Initial Heap Size)和最大堆大小(Maximum Heap Size)。
MaxDirectMemorySize
是 Java 虚拟机(JVM)参数之一,用于设置直接内存的最大大小。Tips:通常情况下,将
-Xms
和-Xmx
设置为相同的值是个好实践。这是因为:
- 性能和内存利用率:将
-Xms
和-Xmx
设置为相同的值可以避免 JVM 在运行时动态调整堆大小,从而减少堆大小调整带来的性能开销。此外,相同的堆大小可以更好地利用内存,避免过多的内存浪费。- 避免频繁的堆大小调整:如果
-Xms
和-Xmx
设置为不同的值,JVM 在启动时会分配-Xms
指定的堆大小,并在达到这个大小后才开始进行垃圾回收。如果系统的实际内存需求超过了-Xms
的大小,JVM 将不得不频繁地进行堆大小调整,这可能导致性能下降。
配置端口
默认端口为8081,如果需要在要在文件中配置端口。(如果不需改端口,此处可以忽略)
-
进入
nexus-3.61.0-02/etc
文件夹,找到nexus-default.properties
这个配置文件 -
编辑
nexus-default.properties
把
application-port
改成想要对外开放的端口后保存并退出 -
对外开放端口
可以先通过
firewall-cmd --list-ports
查看已经对外开放的端口,如果<端口号>/tcp
没有对外开放,再执行下列命令firewall-cmd --add-port=<端口号>/tcp --permanent firewall-cmd --reload
运行 Nexus
启动 Nexus
在nexus-3.61.0-02/bin
文件夹下执行命令./nexus start
看到Starting nexus
就算启动成功
访问 Nexus 后台
在浏览器中输入<IP地址>:<端口号>
等待加载完毕即可见到控制台界面
点击右上角的Sign in
注册管理员账号会出现以下界面
username
为admin
,密码则通过查看提示中给的路径下的文件获取
注册成功后会出现以下界面
点击 Next 之后设置密码
配置私有仓库
maven-releases (Version policy=Release)默认只允许上传不带SNAPSHOT版本尾缀的包,默认部署策略是Disable redeploy 不允许重复上传相同版本号信息的jar,避免包版本更新以后使用方无法获取到最新的包。
maven-snapshots (Version policy=Snapshot)只允许上传带SNAPSHOT版本尾缀的包,默认部署策略是Allow redeploy,允许重复上传相同版本号信息的jar,每次上传的时候会在jar的版本号上面增加时间后缀信息。
maven-central 中央仓库的拷贝,如果环境可以访问中央仓库,则可以获取到相关的包,否则没用
maven-public 仓库组,不是实际个一个仓库地址,只是将现有的组合到一次,可以通过它看到所属组内全部仓库的jar信息
选择maven2(hosted)
proxy:这是代理方式,它是用来代理中央仓库的,例如我们依赖的包在本地仓库没有,就会到私服获取,私服没有的话,会到中央仓库先把包下载到这里,然后再下载到本地仓库;
hosted:指的是我们公司或团队内部的包,并且 hosted 类型的仓库会分为 releases 和 snapshots 两个,前者是正式版,后者一般是开发测试版;
group:它的目的就是把多个仓库组合起来,然后我们项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。
命名仓库的唯一标识符
,选择Version policy
为Mixed
,Deployment policy
为Allow redeploy
Version Policy
(版本策略)是用于控制和管理存储库中的构件版本的规则和行为。它定义了对于特定组织或项目的构件版本如何进行创