Maven这个单词来自于意第绪语(犹太语),意为知识的积累。
Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
众所周知国内有非常强大的防火墙,所以从外网拉取依赖异常艰难。
虽然国内有阿里云公共仓库,但是也有一些依赖不存在阿里云仓库中或仓库有时候连接不上。
这时候 Maven 私服的重要性就体现出来了。
访问官网: https://help.sonatype.com/repomanager3/product-information/download
如果是 Windows 上下载的,上传压缩包到 nexus 文件夹。
tar -zxvf <压缩包名称>
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-3.61.0-02/bin
文件夹下执行命令./nexus start
看到Starting nexus
就算启动成功
在浏览器中输入
等待加载完毕即可见到控制台界面
点击右上角的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
(版本策略)是用于控制和管理存储库中的构件版本的规则和行为。它定义了对于特定组织或项目的构件版本如何进行创建、发布和访问。
- Release(发布):发布版本策略用于稳定和成熟的构件版本。发布版本通常用于生产环境,并且被认为是可靠和长期支持的。发布版本在存储库中是不可更改的,确保了版本的稳定性和可追溯性。
- Snapshot(快照):快照版本策略用于开发和不稳定的构件版本。快照版本通常用于开发过程中的每日构建或持续集成构建。快照版本在存储库中是可更新的,允许覆盖相同版本的构件。快照版本不保证稳定性,可能会随时更改。
- Mixed(混合):混合版本策略结合了发布和快照策略的特点。它允许同时管理发布版本和快照版本。这种策略可以在同一个存储库中同时容纳稳定的发布版本和不稳定的快照版本。
Deployment Policy
(部署策略)是用于管理存储库中构件部署(上传)的规则和行为。它定义了在特定存储库中如何允许和限制构件的部署操作。
- Allow Redeploy(允许重新部署):该策略允许重新部署构件,即在已存在同一版本的构件时允许覆盖。这对于开发过程中的快照构建很常见,因为构建可能会频繁更改,并且开发人员希望能够快速替换现有的构件。
- Strict Content (Disallow Redeploy)(严格内容,禁止重新部署):该策略禁止重新部署构件,即在已存在同一版本的构件时不允许覆盖。这通常适用于发布构件,因为发布构件通常是稳定的版本,不希望被意外覆盖或修改。
- Disable Redeploy(禁用重新部署):该策略完全禁止重新部署构件。一旦构件被部署到存储库中,就无法再对其进行修改或覆盖。这种策略通常用于保护存储库中的构件内容的完整性和不变性。
- Allow Redeploy with Deletion(允许重新部署并删除):该策略允许重新部署构件,并在重新部署时删除已经存在的相同版本的构件。这对于需要更新构件并清理旧版本的场景很有用。
点击 maven-public 仓库,将新建的仓库添加到maven-public库的成员中,然后保存
在本地仓库上传的文件夹(repo)下创建一个 shell 脚本,命名<名称>.sh
touch repo.sh
vim repo.sh
然后在文件中添加以下内容
#!/bin/bash
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
给脚本<名称>.sh
添加执行权限
chmod +x repo.sh
执行以下命令
./repo.sh -u nexus用户名 -p nexus密码 -r 仓库地址
./repo.sh -u admin -p 123 -r http://192.168.197.128:8081/repository/yang-repository/
在maven文件夹下的conf/settings.xml
中进行相关配置
找到localRepository
标签,配置本地仓库路径,用于存放jar包和用maven下载的文件的地方。
<localRepository>D:\MavenRepositorylocalRepository>
找到servers
标签,在里面配置serve
,用于服务器的身份验证。
server
元素用来配置 Maven 构建过程中与远程仓库或服务器进行身份验证和访问的相关参数。
id
:唯一标识服务器配置的 ID。在 Maven 构建配置中引用该 ID,以指定使用哪个服务器配置进行身份验证和访问。username
:与服务器进行身份验证时使用的用户名。password
:与服务器进行身份验证时使用的密码。
<server>
<id>yang-repositoryid>
<username>adminusername>
<password>123password>
server>
<server>
<id>yang-releasesid>
<username>adminusername>
<password>123password>
server>
<server>
<id>yang-snapshotsid>
<username>adminusername>
<password>123password>
server>
中央仓库的资源从阿里云访问,其它资源来自nexus私服。
mirrors
元素用于配置镜像仓库(Mirror Repository),以加速 Maven 构建过程中的依赖项下载。
id
:唯一标识镜像配置的 ID。在 Maven 构建配置中引用该 ID,以指定使用哪个镜像配置。url
:镜像仓库的 URL 地址。Maven 将通过该 URL 地址访问镜像仓库获取依赖项。mirrorOf
:指定需要被镜像的原始仓库的 ID 或 ID 模式。可以是单个原始仓库的 ID,也可以使用通配符模式来匹配多个仓库。mirrorOfLayouts
:指定镜像仓库对应的仓库布局,如默认的 Maven 2 仓库布局或 Maven 1 仓库布局。
<mirrors>
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
<mirror>
<id>nexusid>
<mirrorOf>*mirrorOf>
<name>nexusname>
<url>http://192.168.197.128:8081/repository/maven-public/url>
mirror>
mirrors>
私服访问地址从下图获取:http://192.168.197.128:8081/repository/maven-public/
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
<profile>
nexus仓库配置
<profile>
<id>nexusid>
<repositories>
<repository>
<id>nexusid>
<url>http://192.168.197.128:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>publicid>
<name>Public Repositoriesname>
<url>http://192.168.197.128:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
pluginRepository>
pluginRepositories>
profile>
<activeProfiles>
<activeProfile>nexusactiveProfile>
activeProfiles>
在项目的pom.xml
文件中添加以下内容
<distributionManagement>
<snapshotRepository>
<id>yang-snapshotsid>
<url>http://192.168.197.128:8081/repository/yang-snapshots/url>
snapshotRepository>
<repository>
<id>yang-releasesid>
<url>http://192.168.197.128:8081/repository/yang-releases/url>
repository>
distributionManagement>
<repositories>
<repository>
<id>nexusid>
<url>http://192.168.197.128/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
repositories>
在maven中运行部署,部署(deploy)项目到私服。
至此,搭建 Maven 私服并将项目部署到私服完成。