搭建Nexus私服部署项目

什么是 Maven

Maven这个单词来自于意第绪语(犹太语),意为知识的积累

Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

image-20231012185156573

Maven 发展史

搭建Nexus私服部署项目_第1张图片

Maven 的体系结构

搭建Nexus私服部署项目_第2张图片

为什么要搭建私服

  1. 本地缓存和提高构建速度:Maven 私服可以缓存远程仓库中的依赖项,当项目构建时,首先检查私服是否已经下载过所需的依赖项,如果有,则直接从私服获取,从而减少了对远程仓库的依赖和下载时间,提高了构建的速度。
  2. 离线构建支持:Maven 私服允许在没有互联网连接的环境下进行构建。通过在私服中缓存所需的依赖项,可以在没有网络连接时继续构建项目。
  3. 安全性和稳定性:搭建私服可以确保项目所依赖的库和框架的稳定性和安全性。由于私服可以控制哪些库和版本可用,可以避免项目意外依赖于不受信任的或不稳定的库。
  4. 本地定制和部署:私服允许你发布和管理自己的构建产物。你可以将自己的库、框架或插件发布到私服中,并在项目中引用和使用它们。这样可以更好地管理和共享项目内部的共享组件。
  5. 统一管理和团队协作:搭建私服可以集中管理团队或组织内部使用的共享库和构建产物。团队成员可以从私服中获取所需的依赖项,确保使用的是统一的版本和配置,以提高团队协作和项目的一致性。

众所周知国内有非常强大的防火墙,所以从外网拉取依赖异常艰难。

虽然国内有阿里云公共仓库,但是也有一些依赖不存在阿里云仓库中或仓库有时候连接不上。

这时候 Maven 私服的重要性就体现出来了。

搭建Nexus私服部署项目_第3张图片

如何搭建 Maven 私服

下载安装

下载 Nexus

访问官网: https://help.sonatype.com/repomanager3/product-information/download

搭建Nexus私服部署项目_第4张图片

创建文件夹 nexus

image-20231012190730709

解压压缩包

如果是 Windows 上下载的,上传压缩包到 nexus 文件夹。

tar -zxvf <压缩包名称>

搭建Nexus私服部署项目_第5张图片

配置 Nexus

进入 nexus-3.61.0-02/bin 文件夹下

搭建Nexus私服部署项目_第6张图片

编辑nexus.vmoptions文件

搭建Nexus私服部署项目_第7张图片

根据自己机器内存大小,适当配置内存。内存太小会启动 Nexus 会失败,最好将-Xms-Xmx的值调整相同

我是16G的运行内存,所以我把-Xms-Xmx设置成了4096m,MaxDirectMemorySize设置成了5120m

-Xms-Xmx 是两个常用的 JVM 参数,用于指定初始堆大小(Initial Heap Size)和最大堆大小(Maximum Heap Size)。

MaxDirectMemorySize 是 Java 虚拟机(JVM)参数之一,用于设置直接内存的最大大小。

Tips:通常情况下,将 -Xms-Xmx 设置为相同的值是个好实践。这是因为:

  1. 性能和内存利用率:将 -Xms-Xmx 设置为相同的值可以避免 JVM 在运行时动态调整堆大小,从而减少堆大小调整带来的性能开销。此外,相同的堆大小可以更好地利用内存,避免过多的内存浪费。
  2. 避免频繁的堆大小调整:如果 -Xms-Xmx 设置为不同的值,JVM 在启动时会分配 -Xms 指定的堆大小,并在达到这个大小后才开始进行垃圾回收。如果系统的实际内存需求超过了 -Xms 的大小,JVM 将不得不频繁地进行堆大小调整,这可能导致性能下降。
配置端口

默认端口为8081,如果需要在要在文件中配置端口。(如果不需改端口,此处可以忽略)

  • 进入nexus-3.61.0-02/etc文件夹,找到nexus-default.properties这个配置文件

    image-20231012192559690

  • 编辑nexus-default.properties

    搭建Nexus私服部署项目_第8张图片

    application-port改成想要对外开放的端口后保存并退出

  • 对外开放端口

    可以先通过firewall-cmd --list-ports查看已经对外开放的端口,如果<端口号>/tcp没有对外开放,再执行下列命令

    firewall-cmd --add-port=<端口号>/tcp --permanent
    firewall-cmd --reload
    

image-20231012193230257

运行 Nexus

启动 Nexus

nexus-3.61.0-02/bin文件夹下执行命令./nexus start

搭建Nexus私服部署项目_第9张图片

看到Starting nexus就算启动成功

访问 Nexus 后台

在浏览器中输入:<端口号>

搭建Nexus私服部署项目_第10张图片

等待加载完毕即可见到控制台界面

搭建Nexus私服部署项目_第11张图片

点击右上角的Sign in注册管理员账号会出现以下界面

搭建Nexus私服部署项目_第12张图片

usernameadmin,密码则通过查看提示中给的路径下的文件获取

img

注册成功后会出现以下界面

搭建Nexus私服部署项目_第13张图片

点击 Next 之后设置密码

搭建Nexus私服部署项目_第14张图片

搭建Nexus私服部署项目_第15张图片

配置私有仓库

maven-releases (Version policy=Release)默认只允许上传不带SNAPSHOT版本尾缀的包,默认部署策略是Disable redeploy 不允许重复上传相同版本号信息的jar,避免包版本更新以后使用方无法获取到最新的包。

maven-snapshots (Version policy=Snapshot)只允许上传带SNAPSHOT版本尾缀的包,默认部署策略是Allow redeploy,允许重复上传相同版本号信息的jar,每次上传的时候会在jar的版本号上面增加时间后缀信息。

maven-central 中央仓库的拷贝,如果环境可以访问中央仓库,则可以获取到相关的包,否则没用

maven-public 仓库组,不是实际个一个仓库地址,只是将现有的组合到一次,可以通过它看到所属组内全部仓库的jar信息

搭建Nexus私服部署项目_第16张图片

搭建Nexus私服部署项目_第17张图片

选择maven2(hosted)

proxy:这是代理方式,它是用来代理中央仓库的,例如我们依赖的包在本地仓库没有,就会到私服获取,私服没有的话,会到中央仓库先把包下载到这里,然后再下载到本地仓库;

hosted:指的是我们公司或团队内部的包,并且 hosted 类型的仓库会分为 releases 和 snapshots 两个,前者是正式版,后者一般是开发测试版;

group:它的目的就是把多个仓库组合起来,然后我们项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。

搭建Nexus私服部署项目_第18张图片

命名仓库的唯一标识符,选择Version policyMixed,Deployment policyAllow redeploy

Version Policy(版本策略)是用于控制和管理存储库中的构件版本的规则和行为。它定义了对于特定组织或项目的构件版本如何进行创建、发布和访问。

  1. Release(发布):发布版本策略用于稳定和成熟的构件版本。发布版本通常用于生产环境,并且被认为是可靠和长期支持的。发布版本在存储库中是不可更改的,确保了版本的稳定性和可追溯性。
  2. Snapshot(快照):快照版本策略用于开发和不稳定的构件版本。快照版本通常用于开发过程中的每日构建或持续集成构建。快照版本在存储库中是可更新的,允许覆盖相同版本的构件。快照版本不保证稳定性,可能会随时更改。
  3. Mixed(混合):混合版本策略结合了发布和快照策略的特点。它允许同时管理发布版本和快照版本。这种策略可以在同一个存储库中同时容纳稳定的发布版本和不稳定的快照版本。

Deployment Policy(部署策略)是用于管理存储库中构件部署(上传)的规则和行为。它定义了在特定存储库中如何允许和限制构件的部署操作。

  1. Allow Redeploy(允许重新部署):该策略允许重新部署构件,即在已存在同一版本的构件时允许覆盖。这对于开发过程中的快照构建很常见,因为构建可能会频繁更改,并且开发人员希望能够快速替换现有的构件。
  2. Strict Content (Disallow Redeploy)(严格内容,禁止重新部署):该策略禁止重新部署构件,即在已存在同一版本的构件时不允许覆盖。这通常适用于发布构件,因为发布构件通常是稳定的版本,不希望被意外覆盖或修改。
  3. Disable Redeploy(禁用重新部署):该策略完全禁止重新部署构件。一旦构件被部署到存储库中,就无法再对其进行修改或覆盖。这种策略通常用于保护存储库中的构件内容的完整性和不变性。
  4. Allow Redeploy with Deletion(允许重新部署并删除):该策略允许重新部署构件,并在重新部署时删除已经存在的相同版本的构件。这对于需要更新构件并清理旧版本的场景很有用。
配置Mixed仓库

搭建Nexus私服部署项目_第19张图片

搭建Nexus私服部署项目_第20张图片

配置Release仓库

搭建Nexus私服部署项目_第21张图片

配置Snapshot仓库

搭建Nexus私服部署项目_第22张图片

添加新建仓库到maven-public群组中

点击 maven-public 仓库,将新建的仓库添加到maven-public库的成员中,然后保存

搭建Nexus私服部署项目_第23张图片

搭建Nexus私服部署项目_第24张图片

批量上传本地文件到自定义仓库中

创建 Maven 仓库

image-20231012195857737

上传本地仓库到 Linux 服务器中

搭建Nexus私服部署项目_第25张图片

编辑批量上传脚本

在本地仓库上传的文件夹(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}/{} ;

搭建Nexus私服部署项目_第26张图片

添加权限

给脚本<名称>.sh添加执行权限

chmod +x repo.sh

image-20231012200553799

image-20231012200539194

导入本地仓库到 nexus 私有仓库

执行以下命令

./repo.sh -u nexus用户名 -p nexus密码 -r 仓库地址

./repo.sh -u admin -p 123 -r http://192.168.197.128:8081/repository/yang-repository/

搭建Nexus私服部署项目_第27张图片

搭建Nexus私服部署项目_第28张图片

搭建Nexus私服部署项目_第29张图片

项目中引用 Nexus 库并部署

Maven配置

在maven文件夹下的conf/settings.xml中进行相关配置

本地仓库(localRepository)

找到localRepository标签,配置本地仓库路径,用于存放jar包和用maven下载的文件的地方。

<localRepository>D:\MavenRepositorylocalRepository>

搭建Nexus私服部署项目_第30张图片

远程仓库(serve)

找到servers标签,在里面配置serve,用于服务器的身份验证。

server 元素用来配置 Maven 构建过程中与远程仓库或服务器进行身份验证和访问的相关参数。

  1. id:唯一标识服务器配置的 ID。在 Maven 构建配置中引用该 ID,以指定使用哪个服务器配置进行身份验证和访问。
  2. username:与服务器进行身份验证时使用的用户名。
  3. 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私服部署项目_第31张图片

镜像(mirror)

中央仓库的资源从阿里云访问,其它资源来自nexus私服。

mirrors 元素用于配置镜像仓库(Mirror Repository),以加速 Maven 构建过程中的依赖项下载。

  1. id:唯一标识镜像配置的 ID。在 Maven 构建配置中引用该 ID,以指定使用哪个镜像配置。
  2. url:镜像仓库的 URL 地址。Maven 将通过该 URL 地址访问镜像仓库获取依赖项。
  3. mirrorOf:指定需要被镜像的原始仓库的 ID 或 ID 模式。可以是单个原始仓库的 ID,也可以使用通配符模式来匹配多个仓库。
  4. mirrorOfLayouts:指定镜像仓库对应的仓库布局,如默认的 Maven 2 仓库布局或 Maven 1 仓库布局。

搭建Nexus私服部署项目_第32张图片

<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/搭建Nexus私服部署项目_第33张图片

配置文件(profile)
  • jdk版本配置
<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>
    
激活配置文件(activeprofile)
<activeProfiles>
  <activeProfile>nexusactiveProfile>
activeProfiles>

项目中Maven配置

搭建Nexus私服部署项目_第34张图片

开发使用maven部署

在项目的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)项目到私服。

搭建Nexus私服部署项目_第35张图片

搭建Nexus私服部署项目_第36张图片

搭建Nexus私服部署项目_第37张图片

至此,搭建 Maven 私服并将项目部署到私服完成。

你可能感兴趣的:(maven,java)