1-Maven-settings配置

1-Maven-settings配置

整理下Maven工具的使用。

【本地仓库、私服、镜像仓库、远程仓库、中央仓库】

本文基于阅读其他博客和对公司Maven配置的学习整理出来的。希望通过本此学习能对Maven有个整体性的掌控。

顺序:profile.repository > pom文件中的repository > mirror

配置文件整体结构

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository/>
    <!-- 是否与用户开启交互模式,默认为 true  -->
    <interactiveMode/>
    <!-- 是否支持联网进行 artifact 下载、 部署等操作, 默认: false  -->
    <offline/>
    <pluginGroups/>
    <servers/>
    <mirrors/>
    <!-- 代理配置  -->
    <proxies/>
    <profiles/>
    <activeProfiles/>
</settings>

比较常用的:

  • localRepository :配置本地存储库的位(只有把包下载到本地仓库才能在项目中引用)
  • servers: 配置私服的用户名和密码(配合pom.xml中的 使用,用来把我们本地打的包推到配置的远程仓库中)
  • mirrors: mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
  • profiles: 配置环境
  • activeProfiles: 配置默认激活的环境

在这里插入图片描述

配置文件各部分详解

①servers标签

用来配置私服的账号密码等权限相关信息。不管是repository还是mirror还是distributionManagement亦或者其它的不管是在pom.xml文件中还是在settings.xml中需要用户名密码等权限的都需要通过配置server标签来配置对应的权限。他们之间是通过彼此的id来关联的。

总之 server就是用来配置权限的,和其他标签关联都是用id关联的。

    <!-- 进行远程服务器访问时所需的授权配置信息。通过系统唯一的 server-id 进行唯一关联 -->
    <servers>
        <server>
            <!-- 这是 server 的 id, 该 id 与 distributionManagement 中 repository 元素的id 相匹配 -->
            <id>server_id</id>

            <!-- 鉴权用户名 -->
            <username>auth_username</username>

            <!-- 鉴权密码 -->
            <password>auth_pwd</password>

            <!-- 鉴权时使用的私钥位置。和前两个元素类似, 私钥位置和私钥密码指定了一个私钥的路径(默认是/home/hudson/.ssh/id_dsa)以及如果需要的话, 一个密钥 -->
            <privateKey>path/to/private_key</privateKey>

            <!-- 鉴权时使用的私钥密码, 非必要, 非必要时留空 -->
            <passphrase>some_passphrase</passphrase>

            <!-- 
             | 文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录, 这时候就可以使用权限(permission)
             | 这两个元素合法的值是一个三位数字, 其对应了unix文件系统的权限, 如664, 或者775 
             |-->
            <filePermissions>664</filePermissions>

            <!-- 目录被创建时的权限 -->
            <directoryPermissions>775</directoryPermissions>

            <!-- 传输层额外的配置项 -->
            <configuration></configuration>

        </server>
    </servers>

如图:如果使用私服必然会涉及到配置其用户名密码等权限信息,则需要通过两者的来关联上。

在这里插入图片描述

如图:如果需要推送到私服的话需要配置并通过关联。

在这里插入图片描述

mirrors标签

mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。例如当您无法连接上国外的仓库是, 可以指定连接到国内的镜像服务器。【也可以把mirror理解为一个repository,因为如果代理服务器也需要用户名密码的话,也需要配置对应的server并且也是通过彼此的id进行关联的】

  • !!!私服的配置推荐用profile配置而不是mirror
<mirrors>
        <!-- 
         | 【mirro 匹配顺序】: 
         | 多个 mirror 优先级 按照 id字母顺序进行排列(即与编写的顺序无关)
         | 在第一个 mirror 找不到 artifact, 不会继续超找下一个镜像。
         | 只有当 mirror 无法链接的时候, 才会尝试链接下一个镜像, 类似容灾备份。
         |--> 
        <mirror>
            <!-- 该镜像的唯一标识符, id用来区分不同的 mirror 元素, 同时会套用使用 server 中 id 相同授权配置链接到镜像 -->
            <id>sjtugmaven</id>
            <!-- 镜像名称, 无特殊作用, 可视为简述 -->
            <name>sjtug maven proxy</name>
            <!-- 镜像地址 -->
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <!-- 被镜像的服务器的id, 必须与 repository 节点设置的 ID 一致。但是 This must not match the mirror id
             | mirrorOf 的配置语法: 
             | *           = 匹配所有远程仓库。 这样所有 pom 中定义的仓库都不生效
             | external:*  = 匹配除 localhost、使用 file:// 协议外的所有远程仓库
             | repo1,repo2 = 匹配仓库 repo1 和 repo2
             | *,!repo1    = 匹配所有远程仓库, repo1 除外
             |-->
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
  • mirrorOf标签的详解:被镜像的服务器的id, 必须与 repository 节点设置的 ID 一致。

    central

    对于 central 这值是比较特殊。因为如果我们没有配置repository的话。maven是默认一个远程仓库的就是他们的中央仓库。而这个中央仓库的id就是central。但是如果我们自己配置了私服等也可以设置repository中的id为central。所以当这里的central代指什么需要看下我们自己有没有配置对应的仓库如果没有自定义的仓库的id等于central的话,那这里的central就代表的是maven中央仓库的id。

  • 如果配置了 mirrorOf = *, 则 不管项目的 pom.xml 配置了什么仓库, 最终都会被镜像到 镜像仓库。

  • 如果代理服务器也需要用户名密码的话,也需要配置对应的server并且也是通过彼此的id进行关联。

    在这里插入图片描述

阿里云云效Maven地址:https://developer.aliyun.com/mvn/guide

③profiles标签

构建方法的配置清单, maven 将根据不同环境参数来使用这些构建配置。

如果 settings 中的 profile 被激活, 它的值会覆盖任何其它定义在 pom.xml 中或 profile.xml 中的相同 id 的 profile。

查看当前激活的 profile: mvn help:active-profiles

    <profiles>
        <profile>
            <!-- 该配置的唯一标识符 -->
            <id>profile_id</id>
            <!-- 配置当前profile激活条件 -->
            <activation>
                <!-- 是否默认激活 -->
                <activeByDefault>false</activeByDefault>
              <!--内建的 java 版本检测, 匹配规则: https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html -->
                <jdk>21</jdk>
                <!-- 内建操作系统属性检测, 配置规则: https://maven.apache.org/enforcer/enforcer-rules/requireOS.html -->
                <os>
                    <!-- 操作系统 -->
                    <name>Windows XP</name>
                    <!-- 操作系统家族 -->
                    <family>Windows</family>
                    <!-- 操作系统 -->
                    <arch>x86</arch>
                    <!-- 操作系统版本 -->
                    <version>5.1.2600</version>
                </os>
                <!--
                 | 如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用), 并且其拥有对应的名称和值, Profile就会被激活。
                 | 如果值字段是空的, 那么存在属性名称字段就会激活profile, 否则按区分大小写方式匹配属性值字段
                 |-->
                <property>
                    <!-- 属性名 -->
                    <name>mavenVersion</name>
                    <!-- 属性值 -->
                    <value>2.0.3</value>
                </property>
                <!-- 根据文件存在/不存在激活profile -->
                <file>
                    <!-- 如果指定的文件存在, 则激活profile -->
                    <exists>/path/to/active_on_exists</exists>
                    <!-- 如果指定的文件不存在, 则激活profile -->
                    <missing>/path/to/active_on_missing</missing>
                </file>
            </activation>
            <!--扩展属性设置。扩展属性可以在 POM 中的任何地方通过 ${扩展属性名} 进行引用-->
            <properties>
                <!-- 在当前 profile 被激活时,  ${profile.property} 就可以被访问到了 -->
                <profile.property>this.property.is.accessible.when.current.profile.actived</profile.property>
            </properties>
            <!-- 远程仓库列表 -->
            <repositories>
                <repository>
                    <!-- 远程仓库唯一标识 -->
                    <id>maven_repository_id</id>
                    <!-- 远程仓库名称 -->
                    <name>maven_repository_name</name>
                    <!-- 远程仓库URL, 按protocol://hostname/path形式 -->
                    <url>http://host/maven</url>
                    <!-- 用于定位和排序 artifact 的仓库布局类型-可以是 default(默认)或者 legacy(遗留)-->
                    <layout>default</layout>
                    <!-- 如何处理远程仓库里发布版本的下载 -->
                    <releases>
                        <!-- 是否允许该仓库为 artifact 提供 发布版 / 快照版 下载功能 -->
                        <enabled>false</enabled>
                        <!-- always(每次构建都检查),daily(距上次构建检查时间超过一天)interval: x(距上次构建检查超过 x 分							钟),never(从不)-->
                        <updatePolicy>always</updatePolicy>
                        <!-- 当 Maven 验证 artifact 校验文件失败时该怎么做: ignore(忽略), fail(失败), 或者warn(警告-->
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <!-- 如何处理远程仓库里快照版本的下载 -->
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                </repository>
                <!-- 
                    国内可用的 maven 仓库地址(updated @ 2019-02-08):
                    http://maven.aliyun.com/nexus/content/groups/public
                    http://maven.wso2.org/nexus/content/groups/public/
                    http://jcenter.bintray.com/
                    http://maven.springframework.org/release/
                    http://repository.jboss.com/maven2/
                    http://uk.maven.org/maven2/
                    http://repo1.maven.org/maven2/
                    http://maven.springframework.org/milestone
                    http://maven.jeecg.org/nexus/content/repositories/
                    http://repo.maven.apache.org/maven2
                    http://repo.spring.io/release/
                    http://repo.spring.io/snapshot/
                    http://mavensync.zkoss.org/maven2/
                    https://repository.apache.org/content/groups/public/
                    https://repository.jboss.org/nexus/content/repositories/releases/   
                -->
            </repositories>

            <!-- 
             | maven 插件的远程仓库配置。maven 插件实际上是一种特殊类型的 artifact。
             | 插件仓库独立于 artifact 仓库。pluginRepositories 元素的结构和 repositories 元素的结构类似。
             |-->
            <!--
            <pluginRepositories>
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>
            -->
        </profile>
    </profiles>
  • 标签详解:

    是用来配置profile的激活条件的。当系统满足 标签里面子标签的条件时就会把当前profile设置为有效。

    其他激活方式:

    1. 通过 settings.xml 文件中的标签配置的值为对应标签的id。(或者在idea中勾选!)。
    2. 在命令行, 使用-P标记和逗号分隔的列表来显式的激活, 如: mvn clean package -P 的id)。
  • 标签详解:

扩展属性设置。扩展属性可以在 POM 中的任何地方通过 ${扩展属性名} 进行引用。

属性引用方式(包括扩展属性, 共 5 种属性可以引用):

  1. env.x : 引用 shell 环境变量, 例如, "env.PATH"指代了 $path 环境变量(在 Linux / Windows 上是 %PATH% )
  2. project.x : 引用 pom.xml(根元素就是 project)中 xml 元素内容.例如 ${project.artifactId} 可以获取pom.xml 中设置的 元素的内容
  3. settings.x : 引用 setting.xml(根元素就是 setting) 中 xml 元素内容, 例如 ${settings.offline}
  4. Java System Properties : 所有可通过 java.lang.System.getProperties() 访问的属性都能在通过 ${property_name} 访问, 例如 ${java.home}
  5. x : 在 或者 外部文件 中设置的属性, 都可以 ${someVar} 的形式使用
  • 标签详解:

    用来设置远程仓库

    releases vs snapshots

    maven 针对 releases、snapshots 有不同的处理策略, POM 就可以在每个单独的仓库中, 为每种类型的 artifact 采取不同的策略

    例如:

    ​ 开发环境 使用 snapshots 模式实时获取最新的快照版本进行构建

    ​ 生成环境 使用 releases 模式获取稳定版本进行构建

    依赖包不更新问题:

    1. Maven 在下载依赖失败后会生成一个.lastUpdated 为后缀的文件。如果这个文件存在, 那么即使换一个有资源的仓库后, Maven依然不会去下载新资源。可以通过 -U 参数进行强制更新、手动删除 .lastUpdated 文件:
      find . -type f -name “*.lastUpdated” -exec echo {}" found and deleted" ; -exec rm -f {} ;
    2. updatePolicy 设置更新频率不对, 导致没有触发 maven 检查本地 artifact 与远程 artifact 是否一致
  • ..or.

    jar包更新策略

    每次执行构建命令时, Maven 会比较本地 POM 和远程 POM 的时间戳, 该元素指定比较的频率。

    有效选项是:

    1. always(每次构建都检查)

    2. daily(默认, 距上次构建检查时间超过一天)

    3. interval: x(距上次构建检查超过 x 分钟)

    4. never(从不)

    重要: 设置为 daily, 如果 artifact 一天更新了几次, 在一天之内进行构建, 也不会从仓库中重新获取最新版本

④activeProfiles标签

手动激活 profiles 的列表, 按照 profile 被应用的顺序定义 activeProfile。任何 activeProfile, 不论环境设置如何, 其对应的 profile 都会被激活, maven 会忽略无效(找不到)的 profile。

<activeProfiles>
    <activeProfile>not-exits-profile</activeProfile>
</activeProfiles>

profile的激活方式:上面将profile标签的时候就有讲过激活方式。是其中一种激活方式。

④activeProfiles标签

手动激活 profiles 的列表, 按照 profile 被应用的顺序定义 activeProfile。任何 activeProfile, 不论环境设置如何, 其对应的 profile 都会被激活, maven 会忽略无效(找不到)的 profile。

<activeProfiles>
    <activeProfile>not-exits-profile</activeProfile>
</activeProfiles>

profile的激活方式:上面将profile标签的时候就有讲过激活方式。是其中一种激活方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/693152.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于焊点检测(SJ-BIST)模块实现

关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于焊点检测&#xff08;SJ-BIST&#xff09;模块实现一、引言二、焊点检测功能的实现方法&#xff08;1&#xff09; 输入接口&#x…

SpringBoot+Vue网上超市(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 用户管理员 功能截图

C基础与SDK调试方法

REVIEW 上次学习了一下软件使用流程zynq PS点灯-CSDN博客 本次学习一下C编程基础与调试方法 1. 硬件编程原理 小梅哥视频链接&#xff1a; 07_Xilinx嵌入式裸机硬件编程原理_哔哩哔哩_bilibili 对应的课程笔记&#xff1a;【zynq课程笔记】【裸机】【第7课 】【硬件编程原理…

eNSP学习——配置RIP路由附加度量值

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建RIP网络 3、配置RIP Metricin 4、配置RIP Metricout 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版_ensp配置命令大全资…

Vyper重入漏洞解析

什么是重入攻击 Reentrancy攻击是以太坊智能合约中最具破坏性的攻击之一。当一个函数对另一个不可信合约进行外部调用时&#xff0c;就会发生重入攻击。然后&#xff0c;不可信合约会递归调用原始函数&#xff0c;试图耗尽资金。 当合约在发送资金之前未能更新其状态时&#…

计算机网络-数制转换与子网划分

目录 一、了解数制 1、计算机的数制 2、二进制 3、八进制 4、十进制 5、十六进制 二、数制转换 1、二进制转十进制 2、八进制转十进制 3、十六进制转十进制 4、十进制转二进制 5、十进制转八进制 6、十进制转十六进制 三、子网划分 1、IP地址定义 2、IP的两种协…

Linux之进程信号详解【上】

&#x1f30e; Linux信号详解 文章目录&#xff1a; Linux信号详解 信号入门 技术应用角度的信号 信号及信号的产生       信号的概念       信号的处理方式 信号的产生方式         键盘产生信号         系统调用产生信号         软件…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:隧道和矿井绘图设备

RockMass 正在努力打入采矿业和隧道工程利基市场。 这家位于多伦多的初创公司正在利用 NVIDIA AI 开发一款绘图平台&#xff0c;帮助工程师评估矿井和施工中的隧道稳定性。 目前&#xff0c;作为安全预防措施&#xff0c;地质学家和工程师会站在离岩石五米远的地方&#xff0…

Llama模型家族之Stanford NLP ReFT源代码探索 (二)Intervention Layers层

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

【Java 百“练”成钢】Java 基础:类和对象

Java 基础&#xff1a;类和对象 01.打印信息02.打印类的简单名称03.打印类的 ClassLoader04.获取类的方法05.获取类的Package06.创建一个对象数组07.计算圆的面积08.计算圆的周长09.创建具有私有访问修饰符的成员10.创建带访问修饰符的成员11.将对象作为参数传递12.通过类对象获…

开源多平台AI音乐生成器本地安装结合cpolar内网穿透实现远程访问

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…

Linux 35.5 + JetPack v5.1.3@ ego-planner编译安装

Linux 35.5 JetPack v5.1.3 ego-planner编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;建立工程Step 3&#xff1a;编译工程Step 4&#xff1a;安装工程 3. 问题汇总3.1 planner/plan_env - OpenCV3.2 uav_simulator/local_sensing - CUDA优…

基于非下采样小波包分析的滚动轴承故障诊断(MATLAB R2021B)

小波变换具有良好的时频局部化特性和多分辨率特性&#xff0c;可准确定位信号的突变点并可在不同尺度上描述信号的局部细节特征&#xff0c;被广泛应用于信号降噪。但标准正交小波变换不具有平移不变性&#xff0c;采用标准正交小波对信号消噪后&#xff0c;会在脉冲尖峰处产生…

进口电动防爆调节阀的性能-美国品牌

进口电动防爆调节阀以其卓越的防爆性能、安全可靠、精确控制以及广泛的技术规格和应用场合&#xff0c;成为工业领域中不可或缺的重要设备。 进口电动防爆调节阀的性能可以归纳如下&#xff1a; 一、防爆性能 防爆设计&#xff1a;进口电动防爆调节阀采用专门的防爆设计和制…

使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理

教程简述 在本教程中&#xff0c;您将学习在阿里云交互式建模平台PAI-DSW x Free Prompt Editing&#xff08;CVPR2024中选论文算法&#xff09;图像编辑算法&#xff0c;开发个人AIGC绘图小助理&#xff0c;实现文本驱动的图像编辑功能单卡即可完成AIGC图片风格变化、背景变化…

5. 刷题

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/868 题目描述 小爱需要完成 𝑛n 道题目…

算法训练营day04

一、24. 两两交换链表中的节点 题目链接&#xff1a;https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 文章讲解&#xff1a;https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.h…

经典文献阅读之--P2O-Calib(利用点对空间遮挡关系的相机-激光雷达标定)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

Android 13.0 Launcher3单层模式workspace中app列表页排序功能实现

1.概述 在13.0的定制化开发中,对于Launcher3的功能定制也是好多的,而对于单层app列表页来说排序功能的开发,也是常有的功能这就需要了解加载app数据的流程,然后根据需要进行排序就可以了,接下来就来实现这个功能 如图: 2. Launcher3单层模式workspace中app列表页排序功能…

[AI Google] 在 Android 上以更多方式体验 Google AI

总结 通过将 AI 直接构建到 Android 操作系统中&#xff0c;Google 正在重新想象用户与手机的互动方式。最新的更新包括用于家庭作业帮助的 Circle to Search、增强的 Gemini 助手功能以及通话期间的实时诈骗检测。Circle to Search 现在通过逐步指导帮助学生解决数学和物理问…