首页 > 其他分享 >【Maven】Maven实战总结(一) Maven与Nexus

【Maven】Maven实战总结(一) Maven与Nexus

时间:2022-09-24 20:24:31浏览次数:48  
标签:实战 Nexus 私服 snapshots Maven 仓库 public

背景

  Maven是Java项目中常用的项目管理工具,每天工作都要与Maven打交道,最近有时间了,借此机会总结Maven的使用经验
  通过Maven实战总结系列文章去梳理Maven中的技术点
  本篇文章主要介绍公司中的常用的Nexus私服的使用和相关的技术点

Nexus

  简介
    Nexus是用来帮助开发者构建Maven私服的软件(为什么要构建Maven私服可以百度),类似的软件有Apache基金会的Archiva、JFrog的Artifactory和Sonatype的Nexus
    同时,Nexus也是典型的Java  Web应用,Nexus是典型的Java Web应用,它有两种安装包,一种是包含Jetty容器的Bundle包,另一种是不包含Web容器的war包。

  仓库组与仓库
    Nexus中有多种仓库的概念,对应的也内置有多种类型的仓库,这里主要有四种类型
    1.group(仓库组) 
    2.hosted(宿主) 
    3.proxy(代理)
    4.virtual(虚拟)
    每个仓库的格式为maven2或者maven1
    此外,创建仓库时可以通过 Policy(策略) 控制该仓库是Release(发布)/Snapshot(快照)/Mix(混合)类型
    这里以本人目前使用的Nexus私服仓库截图说明不同类型的仓库的用途

 

 

     maven-central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。
     maven-release:   这是一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。
     maven-snapshot: 这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件。
     3rd_party: 这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得版本构件。
     maven-public:这是一个将不同仓库合并聚合为一个仓库组去对外提供服务
     其中名称为nuget-*开头的不是Maven构建相关的仓库,这里不做赘述
    
     这里为了帮助理解宿主仓库,代理仓库和仓库组的概念,通过下图来说明他们之间的用户和概念
         

     从图9-4中可以看到,Maven可以直接从宿主仓库下载构件;Maven也可以从代理仓库下载构件,而代理仓库会间接                    地从远程仓库下载并缓存构件;最后,为了方便,Maven可以从仓库组下载构件,而仓库组没有实际内容(图中用虚                    线表示),它会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。
  实战:创建仓库和仓库组
    //TODO
  实战: 通过Nexus上传自定义Jar包
         //TODO 
  Maven关联Nexus私服仓库:
       setting.xml部分配置解读

     当需要为Java项目添加Nexus私服上的仓库时,这里有两种方法
     方法一: 针对单个Java项目配置Nexus私服仓库(注意这种方式只对当前Maven项目有效)
          在项目POM中配置Nexus仓库

    <repositories>
        <repository>
            <id>public-snapshots</id>
            <url>Nexus地址/repository/maven-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>public-snapshots</id>
            <url>http://Nexus地址/repository/maven-public/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

      方法二: 针对全局Java项目配置Nexus私服仓库(推荐
            在Maven的conf目录下的settings文件中配置Nexus仓库
          注意:settings.xml并支持直接配置repositories和pluginRepositories,但是Maven提供了Profile的机制让用户讲Nexus仓库配置
              放到settings中的  Profile文件中

 

<profile>
        <id>public-snapshots</id>
        <repositories>
            <repository>
                <id>public-snapshots</id>
                <url>http://Nexus仓库地址/repository/maven-snapshots/</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
                        <repository>
                <id>public-snapshots</id>
                <url>http://Nexus仓库地址/repository/maven-public/</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>public-snapshots</id>
                <url>http://Nexus仓库地址/repository/maven-public/</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles> 
    <activeProfile>public-snapshots</activeProfile> 
  </activeProfiles>

        该配置中使用了一个id为nexus的profile,这个profile包含了相关的仓库配置,同时配置中又使用activeProfile元素将nexus这个profile激活,
      这样当执行Maven构建的时候,激活的profile会将仓库配置应用到项目中去

  Maven配置仓库镜像
    通过上述将Maven与Nexus关联,能够让Maven项目从Nexus私服下载构件,也就是Jar包,但是该配置无法解决某些包仍然从中央仓库下载
    因此这里需要使用Maven的镜像仓库的功能,并且和Nexus私服结合起来使用,让Maven项目下载的Jar包都统一通过Nexus私服下载
    首先这里说明一下settings文件中镜像仓库的配置

    <mirror>
        <id>alimaven</id>
        <mirrorOf>public-snapshots</mirrorOf>
        <name>aliyun maven</name>
        <url>http://Nexus仓库地址/repository/maven-public/</url>
    </mirror>

    <mirrorOf>的值为public-snapshots,表示该配置为Maven中ProfileId为public-snapshot的镜像,任何对于该仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。另外三个元素id、name、url与一般仓库配置无异,表示该镜像仓库的唯一标识符、名称以及地址,<mirrorOf>的值为星号,表示该配置是所有Maven仓库的镜像

 

参考资料

  Maven实战 (许晓斌)
    

标签:实战,Nexus,私服,snapshots,Maven,仓库,public
From: https://www.cnblogs.com/july-sunny/p/16726387.html

相关文章

  • maven 学习笔记
    maven介绍1、是一个依赖管理工具2、自定义本地仓库例如:d:\javaStudy\maven20203、当项目使用时会首先检查本地是否存在,减少每次拉取远程仓库依赖包4、配置文件pom.xml......
  • Maven快速配置和入门
    概念Maven其实就是一个管理项目、构建项目的工具。它有标准化的项目结构、构建流程、依赖管理。功能Maven提供了一套标准的项目结构Maven提供了一套标准的构建流程Ma......
  • IDEA中maven项目右侧maven图标不见了
    右侧maven图标没有了解决方法:双击shift(或者点击help-->FindAction)打开搜索功能--->搜素MavenProject--->选择AddMavenproject--->选择当前项目的pom.xml文件,然后......
  • 使用 Maven 聚合⼯程创建微服务
    创建流程idea操作过程CreateNewProject创建maven项目编辑groupId,ArtifactId,项目名配置项目「JDK」删除src目录创建新的模块......
  • 盘点一个Python网络爬虫实战问题
    大家好,我是皮皮。一、前言前几天在Python铂金交流群【红色基因代代传】问了一个Python网络爬虫的问题,提问截图如下:代码截图如下:报错截图如下:要么就是原始网页没那......
  • 【Java】关于Maven仓库地址
    仓库如果你没有配置阿里云仓库镜像源,可以到这里来找https://mvnrepository.com/如果你配置了阿里云仓库镜像源,可以来这里找https://developer.aliyun.com/mvn/view我......
  • 第三章实战
    实例7变形 实战一             ......
  • dotnet7 aot编译实战
    0起因这段日子看到dotnet7-rc1发布,我对NativeAot功能比较感兴趣,如果aot成功,这意味了我们的dotnet程序在防破解的上直接指数级提高。我随手使用asp.netcore-7.0模板创建了......
  • 【项目实战】自备相机+IMU跑通Vins-Mono记录
    前言初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以......
  • STS用Maven写一个登录页面 - 将MySQL和STS连接起来
     准备用户名数据库创建方法前面已介绍,不重复说明。创建方法:https://www.cnblogs.com/smart-zihan/p/15041013.html通过MySQLWorkbench添加。  连接MySQL与STS......