1-Maven-settings配置

news2024/10/6 10:32:16

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标签的时候就有讲过激活方式。是其中一种激活方式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序 UI 风格,独具匠心

小程序 UI 风格&#xff0c;独具匠心

iOS 之homebrew ruby cocoapods 安装

cocoapods安装需要ruby&#xff0c;更新ruby需要rvm&#xff0c;下载rvm需要gpg&#xff0c;下载gpg需要homebrew&#xff0c;所以安装顺序是homebrew->gpg->rvm->ruby-cocoapods Rvm 官网&#xff1a; RVM: Ruby Version Manager - RVM Ruby Version Manager - Docum…

04-240606Spark笔记

04-240606Spark笔记 1.行动算子-2 save相关算子: 格式: def saveAsTextFile(path: String): Unit def saveAsObjectFile(path: String): Unit def saveAsSequenceFile(path: String,codec: Option[Class[_ <: CompressionCodec]] None): Unit 例子: val rdd sc.makeR…

Next.js Tailwind CSS UI组件

摘要&#xff1a; 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件&#xff01;这从头构建一个AI驱动的前端UI组件生成器&#xff0c;生成Next.js Tailwind CSS UI组件&#xff1a; 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

【MySQL】聊聊order by 是如何排序的

CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city) ) ENGINEInnoDB;构建一个表结构&#xff0c;以及数据。 本篇主要来分析下order by是如何进…

前端 JS 经典:图片裁剪上传原理

前言&#xff1a;图片裁剪一般都是用户选择头像时用到&#xff0c;现在很多插件都可以满足这个功能&#xff0c;但是我们不仅要会用插件&#xff0c;还要自己懂的裁剪原理。 1. 流程 流程分为&#xff1a;1. 预览本地图片 2. 选择裁剪区域 3. 上传裁剪图像 2. 如何预览图片 …

作业06 递推算法1

作业&#xff1a; #include <iostream> using namespace std; int main(){long long a[110];short n;cin>>n;a[0]1;a[1]1;for(int i2;i<n;i){a[i]a[i-1]a[i-2];}cout<<a[n-1];return 0; } #include <iostream> using namespace std; int main(){lon…

【机器学习】机器学习与大模型在人工智能领域的融合应用与性能优化新探索

文章目录 引言机器学习与大模型的基本概念机器学习概述监督学习无监督学习强化学习 大模型概述GPT-3BERTResNetTransformer 机器学习与大模型的融合应用自然语言处理文本生成文本分类机器翻译 图像识别自动驾驶医学影像分析 语音识别智能助手语音转文字 大模型性能优化的新探索…

41【Aseprite 作图】粉红宫灯——拆解

1 宫灯轮廓 上面三角&#xff0c;下面3 3 3 &#xff08;粉色在后面&#xff0c;做轮廓&#xff09;&#xff0c;棕色在外面&#xff0c;看做是灯骨&#xff08;竖着更长&#xff09;&#xff1b;中间是横着做灯骨 尾部的彩带&#xff0c;下面粉色更浅&#xff0c;上面绿色更浅…

Eclipse添加C和C++编译成汇编文件的选项

在miscellaneous中添加assemble listing选项就可以生成汇编文件了

12_JavaWebAjax

文章目录 Ajax1. 同步请求异步请求2. Ajax实现方式3. 日程管理第四期4. 响应JSON串4.1 响应JSON串格式的一般格式 Appendix Ajax 发送请求的一些方式 1.输入浏览器回车 2.html>head>script/link ​ img标签 3.a标签form表单标签等 用户手动控制提交产生&#xff1b…

【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别

目录 一、 动态SQL1.1 \<if>标签1.2 \<trim>标签1.3 \<where>标签1.4 \<set>标签1.5 \<foreach>标签1.6 \<include>标签 二、 #{}与${}的区别2.1 #{}是预编译sql&#xff0c;${}是即时sql2.2 SQL注入2.3 #{}性能高于${}2.4 ${}用于排序功能…

MATLAB基础应用精讲-【数模应用】二元Logit分析(最终篇)(附python、MATLAB和R语言代码实现)

目录 算法原理 SPSSAU 1、二元logistic分析思路说明 2、如何使用SPSSAU进行二元logistic操作 3、二元logistic相关问题 算法流程 一、分析前准备 1、确定分析项 2.多重共线性判断 3.数据预处理 二、回归基本情况分析 三、模型拟合评价 1、似然比检验 2、拟合优…

C语言(数据存储)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

htb_Mailing

端口扫描 主页有一个download按键 点击后下载了一个pdf 大致看了一下&#xff0c;就是一个使用邮件服务器的说明书 不过最后有一个用户名Maya 目录扫描 /assests/ 一个存图片的地方 /download.php 需要指定下载文件&#xff0c;大概就是刚刚那个pdf 返回主页再次下…

编译等底层知识

目录 一. GCC命令语句大全 二. GCC编译4个阶段 三. makefile的使用 四. CMake 五. GNU工具链开发流程图 六. Keil中的地址段 七. 静态库和动态库 一. GCC命令语句大全 -c只编译源文件&#xff0c;生成目标文件&#xff08;.o 文件&#xff09;&#xff0c;不进行链接。…

学习使用Opentelemetry python SDK

前言 &#x1f4e2;博客主页&#xff1a;程序源⠀-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 一、什么是 OpenTelemetry OpenTelemetry 由 OpenTracing 和 OpenCensus 项目合并而成&#xff0c;是一组规范、工具、API…

DxO ViewPoint v4.8 解锁版安装教程 (校正几何和透视的图像处理)

前言 DxO ViewPoint中文版是一款能够校正几何和透视的图像处理软件,摄影师通过ViewPoint破解版修复构图和光学缺陷并恢复拍摄对象平衡,重新调整如弯曲架构和扭曲图案等细节,让图像具备更强冲击力和更优平衡性。 一、下载地址 下载链接&#xff1a;http://dygod/source 点击搜…

VMware Workstation虚拟机固定IP配置(主机互通、外网可访问)

VMware Workstation虚拟机固定IP配置 环境问题配置过程配置虚拟机网络适配器配置虚拟机网络配置虚拟网卡网络适配器配置虚拟机固定IP 结果验证结束语参考 环境 主机&#xff1a;Windows 11 VMware Workstation: 17.5.2 虚拟机&#xff1a;Ubuntu 24.02 LTS 注&#xff1a; 主…

VRRP----虚拟路由器冗余协议(技术专题)

目录 一、VRRP的基本原理 1.1 技术背景 1.2 VRRP带来了什么 1.2.1 VRRP的作用 1.2.2 VRRP工作的过程 1.2.3 VRRP报文: 1.3 VRRP术语 1.3.1 虚拟IP地址、MAC地址 1.3.2 Master、Backup路由器 二、VRRP的基础配置 实例一 需求 配置 一、VRRP的基本原理 1.1 技术背景…