maven配置文件(一)Settings配置

一、仓库

1、关系

我们依赖的外部服务是需要有地方进行存储的,而存储的地方就称之为仓库。其中仓库又分为本地仓库、中央仓库、镜像仓库、私服。

(1)本地仓库
当项目在本地编译或运行时,直接加载本地的依赖服务无疑是最快的。默认情况下,不管在Window还是Linux下,每个用户在自己用户目录下都有一个路径名为.m2/repository/的仓库目录。

而原始的本地仓库是为空的,因此maven需要知道一个网络上的仓库,在本地仓库不存在时前往下载网络上的仓库,也就是远程仓库。

(2)中央仓库
当maven未配置时,会默认请求maven的中央仓库,中央仓库包含了这个世界上绝大多数流行的开源java构件,以及源码、作者信息、SCM,信息、许可证信息等,每个月这里都会接受全世界java程序员大概1亿次的访问,它对全世界java开发者的贡献由此可见一斑。

但是由于最常见的例如网络原因等,国外的中央仓库使用起来并不顺利,因此就有了下载地址为国内的中央仓库,也就是镜像仓库。

(3)镜像仓库
总结来说,镜像仓库就是将国外的中心仓库复制一份到国内,这样一来下载速度以及访问速度都将很快。

(4)私服
一般来说中央仓库或者镜像仓库都能满足我们的需求,但是当我们在公司内合作开发代码时,可能因为系统保密性原因,有一些其他同事开发的外部依赖只希望能够被本公司的人使用,而如果上传到镜像仓库则保密性就不复存在了。因此私服最主要的功能时存储一些公司内部不希望被公开的依赖服务。

2、mirror和repository区别

(1)仓库repository:

简单点来说,repository就是个仓库。maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用。当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并做缓存。你也可以把你做的东西上传到本地仓库给你本地自己用,或上传到远程仓库,供大家使用。 internal repository是指在局域网内部搭建的repository,它跟central repository, jboss repository等的区别仅仅在于其URL是一个内部网址。

远程仓库可以在工程的pom.xml文件里指定。如果没指定,默认就会把下面这地方做远程仓库,即默认会到 http://repo1.maven.org/maven2 这个地方去请求插件和依赖包。

<repository>  
	<snapshots>  
        <enabled>false</enabled>  
    </snapshots>  
    <id>central</id>  
    <name>Maven Repository Switchboard</name>  
    <url>http://repo1.maven.org/maven2</url>  
</repository>

(2)镜像

镜像是仓库的镜子,保存了被镜像仓库的所有的内容,主要针对远程仓库而言。配置mirror的目的一般是出于网速考虑。如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。举个例子,http://maven.NET.cn/content/groups/public/ 是中央仓库 http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。

id的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。

关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。这时,可以配置这样的一个镜像,如例:

<settings>
    ...
    <mirrors>
        <mirror>
            <id>internal-repository</id>
            <name>Internal Repository Manager</name>
            <url>http://192.168.1.100/maven2</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
    ...
</settings>

 该例中的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://192.168.1.100/maven2/。

如果该镜像仓库需要认证,则配置一个Id为internal-repository的即可。

二、全局settings、用户setting、pom的区别:

(1)全局 settings.xml 是 maven 的全局配置文件,一般位于${maven.home}/conf/settings.xml,即maven文件夹下的conf中。

(2)用户 setting是maven的用户配置文件,一般位于${user.home}/.m2/settings.xml,即每位用户都有一份配置文件。

(3)pom.xml 文件是项目配置文件,一般位于项目根目录下或子目录下。

配置优先级从高到低:pom.xml > 本地 settings > 全局 settings,如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。

一般我们只需关注全局settings和pom即可。

三、全局settings配置文件

1、概览
<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
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
	
    <!-- 该值表示构建系统本地仓库的路径,默认值:~/.m2/repository,如:<localRepository>D:\repo</localRepository> -->
  	<localRepository/>
    
    <!--
		作用:表示maven是否需要和用户交互以获得输入
		如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。
	-->
  	<interactiveMode/>
    
    <!--
		作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
		如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false。
	-->
  	<usePluginRegistry/>
    
    <!--
		作用:表示maven是否需要在离线模式下运行。
		如果构建系统需要在离线模式下运行,则为true,默认为false。
		当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
	-->
  	<offline/>
    
    <!--
		作用:当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。
		该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。
		当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。
		默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo。
	<pluginGroups>
    	<pluginGroup>plugin的组织Id(groupId):org.codehaus.mojo</pluginGroup>
  	</pluginGroups>
	-->    
  	<pluginGroups/>

    <!-- 下面几个标签详细介绍 -->
  	<servers/>
  	<mirrors/>
  	<proxies/>
  	<profiles/>
  	<activeProfiles/>
</settings>
2、servers 标签
2.1、作用:

一般,仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在settings.xml中。

2.2、使用
<servers>
    <server>
        <!-- server的id,不是用户登录的id,该id与distributionManagement中repository元素的id相匹配 -->
        <id>serverId</id>
        
        <!-- 鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码 -->
        <username>username</username>
        <password>password</password>
        
        <!-- 鉴权时使用的私钥位置 -->
        <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
        <!-- 鉴权时使用的私钥密码 -->
      	<passphrase>passphrase</passphrase>
        
        <!-- 文件被创建时的权限 -->
      	<filePermissions>664</filePermissions>
      	<!-- 目录被创建时的权限 -->
      	<directoryPermissions>775</directoryPermissions>
    </server>
</servers>
2.3、demo:

(1)pom配置:

<repositories>
		<repository>
			<id>mvn-releases</id>
			<name>group Releases Repository</name>
			<url>https://xxx.xx/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>mvn-snapshots</id>
			<name>your company edu Snapshots Repository</name>
			<url>https://xxx.xx/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>mvn-repo</id>
			<name>mvn-repo</name>
			<url>https://depend.your company.com/artifactory/mvn-repo/</url>
		</repository>
	</repositories>

	<distributionManagement>
		<repository>
			<id>mvn-releases</id>
			<name>your company edu Releases Repository</name>
			<url>https://xxx.xx/</url>
		</repository>

		<snapshotRepository>
			<id>mvn-snapshots</id>
			<name>your company edu Snapshots Repository</name>
			<url>https://xxx.xx/</url>
		</snapshotRepository>
	</distributionManagement>

(2)全局settiing配置:

  <servers>
        <server>
            <id>mvn-repo</id>
            <username>zhangsan</username>
            <password>abcdefg</password>
        </server>
        <server>
            <id>mvn-snapshots</id>
            <username>zhahgsan</username>
            <password>abcdefg</password>
        </server>
        <server>
            <id>mvn-releases</id>
            <username>zhahgsan</username>
            <password>abcdefg</password>
        </server>
        <server>
            <id>mvn-mirror</id>
            <username>zhahgsan</username>
            <password>abcdefg</password>
         </server>
    </servers>
3、mirrors 标签
3.1、作用

用来配置相应的镜像仓库。如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。用过Maven的都知道,国外的中央仓库因为网络原因用起来太慢了,所以选择一个国内的镜像就很有必要,推荐国内的阿里云镜像。 

3.2、使用
<mirrors>
    <mirror>
        <!-- 该镜像的唯一标识符 -->
        <id>mirrorId</id>
        
        <!-- 镜像名称 -->
        <name>name</name>
        
        <!-- 该镜像的URL,构建系统会优先考虑使用该URL,而非使用默认的服务器URL -->
        <url>url</url>
        
      	<!-- 被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
      	<mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
3.3、参数

(1)id与name:用来标识唯一的仓库;

(2)url:为镜像仓库地址

(3)mirrorOf:用来匹配当请求什么仓库依赖时使用该镜像。选项有:

  • <mirrorOf>*<mirrorOf>:匹配所有远程仓库。
  • <mirrorOf>external:*<mirrorOf>:匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
  • <mirrorOf>repo1,repo2<mirrorOf>:匹配仓库repo1h和repo2,使用逗号分隔多个远程仓库。
  • <mirrorOf>*,!repo1<mirrorOf>:匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

注意事项:

(1)由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

(2)maven 读取mirror 配置是 从上往下读取的,因此谨慎配置<mirrorOf>*<mirrorOf>,因为如果第一个镜像仓库配置了如此标志,那么如果该仓库即使不存在对应依赖也不会向下游查询。

3.4、demo
 <mirrors>
        <mirror> 
            <id>mvn-mirror</id> 
            <mirrorOf>centra</mirrorOf> 
            <name>mvn-mirror</name> 
            <url>https://depend.yourcompany.com/artifactory/mvn-repo/</url>
        </mirror>
		<mirror>
			<id>alimaven</id>
			<mirrorOf>central</mirrorOf>
			<name>aliyun maven</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		</mirror>
    </mirrors>  
4、profiles标签
4.1、作用:

根据环境参数来调整构建配置的列表。

4.2、元素

它包含了id、activation、repositories、pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。

(1)activation
作用:自动触发profile的条件逻辑。

如pom.xml中的profile一样,profile的作用在于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。

activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。注:在maven工程的pom.xml所在目录下执行mvn help:active-profiles命令可以查看中央仓储的profile是否在工程中生效。

(2)properties

demo:指定java版本号

<profile>
            <id>jdk-1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
4.3、使用
<profiles>
    <profile>
      	<id>test</id> <!-- profile的唯一标识 -->
      	<activation /> <!-- 自动触发profile的条件逻辑 -->      
      	<properties /> <!-- 扩展属性列表 -->      
      	<repositories /> <!-- 远程仓库列表 -->      
      	<pluginRepositories /> <!-- 插件仓库列表 -->
    </profile>
</profiles>
4.4、demo
 <profiles>
     
        <profile>
            <id>mvn-repo</id>
            <repositories>
                <repository>
                    <id>mvn-repo</id>
                    <url>https://depend.yourcompany.com/artifactory/mvn-repo/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
 
    </profiles>

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

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

相关文章

微信如何设置自动回复消息,提升沟通效率的?

在日常微信聊天过程中&#xff0c;我们可能会频繁遇到相同问题的客户提问&#xff0c;特别是对于从事销售工作的朋友们而言&#xff0c;客户添加好友后的第一句话常常为“在吗”或“你好”。当我们拥有大量好友&#xff0c;手动逐一回复可能会耗费大量时间。因此&#xff0c;自…

甘特图资源视图和任务视图的区别

甘特图(Gantt chart)是一种常用的项目管理工具,用于直观地展示项目的进度和各项任务的时间安排。甘特图包含资源视图和任务视图两种视角。 一个项目的甘特图demo &#xff1a; https://zz-plan.com/share/87f1340286f1343ba5 资源视图主要显示项目中不同资源的分配和利用情况…

预处理大致解析(参见《C语言深度解剖》更好得到学习)

预处理大致解析&#xff08;参见《C语言深度解剖》更好得到学习&#xff09; 一、预定义符号二、#define三、其他预处理指令<font face "楷体" size 5 color blue>//库文件包含 //#include < filename.h > //直接在库文件所在的标志路径查找&#xff…

谷歌seo推广效果怎么判断?

要想判断谷歌SEO推广效果&#xff0c;核心在于观察和分析几个关键指标&#xff0c;一个网站最重要的自然就是流量&#xff0c;没有流量的网站说到底就是一个被雪藏的花架子&#xff0c;没什么意义&#xff0c;所以看流量自然就是最重要的指标&#xff0c;SEO做得好&#xff0c;…

阿里云服务器2核4G租用价格_2核4G支持人数新能测评

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

远程IT技术支持软件有哪些

什么是远程支持软件 远程支持软件允许 IT 部门和管理员通过内部网络或互联网从远程位置连接和控制设备&#xff0c;以解决技术问题并自动执行日常任务。企业使用远程支持软件来解决技术问题并增强安全性&#xff0c;而无需技术人员物理访问需要支持的设备。 远程支持解决方案…

PHP项目中composer和Git的组合使用

highlight: 在国内由于众所周知的原因&#xff0c;composer的package可能无法访问&#xff0c;解决办法是使用中国的全镜像&#xff1a; composer config -g repositories.packagist composer http://packagist.phpcomposer.com 在需要使用composer package的地方创建composer…

车载测试中:internal lock 的意思

internal lock的用法讲解 英语单词 \\"internal lock\\" 的用法讲解 \\"Internal lock\\" 是一个常见的词组&#xff0c;通常用于讨论机械、锁具和安全等方面的话题。下面将介绍这个词组的几种用法。 1. 机械锁中的 \\"internal lock\\" 在机…

YOLOv8 DeepSORT实现智能交通监控-改进yolo单目测距及速度测量-流量计数

YOLOv8 DeepSORT是一种基于目标检测和跟踪技术的智能交通监控系统。它基于YOLOv8&#xff0c;通过加入DeepSORT算法实现目标跟踪&#xff0c;同时还改进了YOLOv8的单目测距及速度测量技术和流量计数功能。 该系统可以通过摄像头或视频源实时捕获图像&#xff0c;并自动检测和跟…

python钉钉机器人加签

代码 import requests import json import time import hmac import hashlib import base64 import urllib.parsedef get_url(access_token, secret):t,s get_sign(secret)webhook_url fhttps://oapi.dingtalk.com/robot/send?access_token{access_token}&timestamp{t}…

TSMaster 2024 最新版本实用功能更新,收藏不迷路

TSMaster 作为一款软硬件解耦&#xff0c;快速迭代&#xff0c;并不断被软件定义的国产工业软件&#xff0c;保持每周一次的更新频率&#xff0c;已经渗透到全球汽车产业企业。在2024年初&#xff0c;进行了大规模的功能更新&#xff01;不仅对软件进行了全面优化&#xff0c;同…

python入门基础:深入了解Python开发工具,PyCharm安装运行详解

Python 是一种解释型语言&#xff0c;通常不需要像 C 或 C 那样的传统编译过&#xff0c;上一篇写了关于下载安装Python解释器的安装以及使用的详解&#xff0c;接下来写有一些工具更有助于开发、编译和打包 Python 项目的&#xff1a;vscode、pycharm、pip。 以下是关于的 Py…

六西格玛培训对薪资的真实影响:不只是数字的变化

近年来&#xff0c;提升自身能力、寻求职业突破成为了许多职场人士的共同追求。其中&#xff0c;六西格玛培训作为一种先进的质量管理方法&#xff0c;受到了不少企业和个人的青睐。那么&#xff0c;六西格玛培训对个人的薪资水平究竟有何影响&#xff1f;本文&#xff0c;天行…

AwesomeTechnologyWeekly值的关注的中文社区优质技术周刊一览

作为开发者&#xff0c;我们每天都需要吸收大量的信息补充我们的知识体系. Awesome Technology Weekly Zh-Hans 项目收集了中文技术社区各个领域的高质量的中文技术月/周/日刊&#xff0c;定时刷新获取最新一期中文技术月/周/日刊进行展示. 访问网站开始关注吧~&#xff1a;ht…

Python - getpass

文章目录 关于 getpass基本使用语法说明其它 关于 getpass getpass 是 Python 自带标准库 Python 官方文档 - getpass https://docs.python.org/3/library/getpass.html 基本使用 我们在看视频教程中&#xff0c;老师如果不想在代码中暴露 token、密码之类的信息&#xff0c…

巧【二叉搜索树的最近公共祖先】【二叉搜索树的性质】Leetcode 235. 二叉搜索树的最近公共祖先

【二叉搜索树的最近公共祖先】【二叉搜索树性质】Leetcode 235. 二叉搜索树的最近公共祖先 【巧】解法1 利用二叉搜索树有序的性质解法2 采用二叉树求最近公共祖先的方法——后序遍历 ---------------&#x1f388;&#x1f388;235. 二叉搜索树的最近公共祖先 题目链接&#x…

帮公司面试了个要25K的测试,我问了他这些问题...

深耕IT行业多年&#xff0c;我们发现&#xff0c;对于一个程序员而言&#xff0c;能去到一线互联网公司&#xff0c;会给我们以后的发展带来多大的影响。 很多人想说&#xff0c;这个我也知道&#xff0c;但是进大厂实在是太难了&#xff0c;简历投出去基本石沉大海&#xff0…

YOLOV9训练集制作+Train+Val记录

一、YOLO数据集格式分布 在YOLO中&#xff0c;数据集的分布如图&#xff0c;在dataset文件夹下有imags&#xff08;图片&#xff09;和labels&#xff08;标签&#xff09;。在images和labels文件夹下又分别存放三个文件夹&#xff0c;分别对应测试集、训练集、验证集&#xff…

如何使用Python Flask发布web页面至公网并实现远程访问【内网穿透】

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

Java中的排序算法

引言&#xff1a; 当谈到编程语言中的排序&#xff0c;Java 作为一种广泛使用的编程语言&#xff0c;提供了许多强大的排序算法来满足不同的需求。排序是一种将一组数据按照特定顺序重新排列的过程&#xff0c;通常是按照升序或降序排列。在 Java 中&#xff0c;我们可以利用内…