百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

maven settings.xm配置文件详解 maven的settings文件

lipiwang 2024-10-26 13:11 10 浏览 0 评论

概要

maven是一款项目资料仓库,大概有以下几个目标:

  • 简化构建过程
  • 提供统一的构建系统
  • 提供优质项目资料

目前java程序大部分都是基于maven进行构建的,可以说是java程序员必学的一门功课。


配置文件settings.xml

maven配置文件可以使maven的按指定的方式进行工作。maven的配置文件一般有两个存放的位置:

  • ${user.home}/.m2/settings.xml
  • ${maven.home}/conf/settings.xml

以下示例展示settings.xml的所有一级元素

<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">
  <localRepository/>
  <interactiveMode/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

xml的内容可以使用以下表达式进行插值:

  • ${user.home} 系统属性 (Maven 3.0以上版本支持)
  • ${env.HOME} 环境变量写法

各元素介绍

1.localRepository

设置本地仓库目录,默认是${user.home}/.m2/repository,设置该值后在远程maven仓库下载的依赖都会存储在该目录下。

<localRepository>/path/to/local/repo</localRepository>

2.interactiveMode

是否与用户交互以获取输入,默认true。

3.offline

是否离线模式,默认为fasle,设置为true将不会从互联网上下载依赖内容。offiline属性在一些因网络原因以及安全因素不能连接远程仓库时十分有效。

<offline>false</offline>

3.pluginGroups

可以添加多个pluginGroup的元素列表,内容包含一个groupId, 当使用插件并且命令行中没有提供groupId时,会搜索列表。该列表会自动包含 org.apache.maven.plugins org.codehaus.mojo

<pluginGroups>
    <pluginGroup>org.eclipse.jetty</pluginGroup>
</pluginGroups>

设置了以上内容后,maven命令

org.eclipse.jetty:jetty-maven-plugin:run

可以简化为

mvn jetty:run

4.servers

仓库的下载部署一般是定义在pom.xml文件的repositoriesdistributionManagement 元素中。但是仓库访问的账号密码应该放在settings.xml文件中。

<servers>
    <server>
      <id>server001</id> 
      <username>my_login</username>
      <password>my_password</password>
      <privateKey>${user.home}/.ssh/id_dsa</privateKey>
      <passphrase>some_passphrase</passphrase>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
</servers>
  • id:server唯一标识,与用户无关,需与pom文件中的repository的id一致
  • username, password: 用户账号密码,(密码在 2.1.0版本后也可以使用加密技术,可以参见maven官方文档,本文不讨论)
  • privateKey, passphrase:跟username、password类似,这里是指定私钥的路径(默认 ${user.home}/.ssh/id_dsa)和密码
  • filePermissions, directoryPermissions:文件和目录创建时的权限,值对应unix系统的三位权限数字 664,775

如果使用了privateKey就不要在天password了,否则privateKey会被忽略。

5.mirrors

一般来讲,我们会在项目pom.xml文件中配置指定仓库用于下载依赖和maven插件,有时我们希望为仓库使用另外的镜像,但是不希望修改项目中的文件,这时就可以配置mirrors

为什么我要配置mirrors:

  • 使用地理上更近的镜像将更快速(比如国内阿里云比国外的快)
  • 希望使用自己内部的仓库,将更易于管理
  • 希望运行仓库管理器来为镜像提供本地缓存,因此需要使用url代替

配置示例

<mirror>
  <id>aliyunmaven</id>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
  <mirrorOf>*</mirrorOf>
</mirror>
  • id:唯一标识,用于区分不同的mirror
  • name:仓库名称
  • mirrorOf:作为镜像的存储库的id。比如 central , *, !foo,不同的mirror里mirrorOf不能重复,否则将只使用第一个。

官方的仓库 由Sonatype公司托管,通过CDN分布在世界各地。如果mirrorOf 设置成central 将会替换官方的仓库从而使用自己配置的仓库。如果mirrorOf 设置成“*”,则会强制使用该仓库,那么该仓库就必须包含所有你需要的内容,该特性在 2.0.5以上版本有效。

Maven 2.0.9以上版本,你可以将mirrorOf 配置成逗号隔开的方式来配置多个仓库,注意不能有空格。

<mirror>
  <id>aliyunmaven</id>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
  <mirrorOf>repo,repo1</mirrorOf>
</mirror>

可以在首字母前加感叹号来排除某个仓库

<settings>
  ...
  <mirrors>
    <mirror>
      <id>internal-repository</id>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
      <mirrorOf>external:*,!foo</mirrorOf>
    </mirror>
    <mirror>
      <id>foo-repository</id>
      <name>Foo</name>
      <url>http://repo.mycompany.com/foo</url>
      <mirrorOf>foo</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

external:* 代表所有依赖都是外部,都不在本地主机上,也不基于文件。

6.proxies

设置代理服务器

<proxies>
    <proxy>
      <id>myproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
    </proxy>
</proxies>
  • id: 唯一标识
  • active: 是否生效,只能一个代理设置为true
  • protocol, host, port: 组合起来就是代理地址 protocol://host:port
  • username, password: 服务器账号密码
  • nonProxyHosts:不用代理的主机列表,多个可以用 | 分割,逗号也是可以的

7.profiles

settings.xml文件中的profile是pom.xml中的profile的其中一部分,有以下部分组成:

(1)activation: 当满足所有指定的条件时,就会激活该profile,如下示例指定了条件jdk、系统、配置参数、文件是否存在或不存在等条件。

<profiles>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      ...
    </profile>
</profiles>

如果某个profile被启用,将会覆盖pom中同id的profile。启用某个profile不只activation一种方式,还可以通过maven命令加 -P 参数启用某个profile。

(2)repositories:

当profile被激活时定义在profile里的远程仓库将被使用。

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>codehausSnapshots</id>
          <name>Codehaus Snapshots</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </snapshots>
          <url>http://snapshots.maven.codehaus.org/maven2</url>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        ...
      </pluginRepositories>
      ...
    </profile>
</profiles>
  • releases, snapshots: 仓库依赖的类型策略,发布版本和快照版本,可以设置启用某个版本,比如可能出于开发目的只启用快照版本。
  • enabled: true代表启用该类型
  • updatePolicy:更新频率 Maven将比较本地POM的时间戳(存储在存储库的Maven元数据文件中)和远程POM的时间戳。 选项有:always(总是)、daily(每天,默认值)、interval:X(每隔X分钟)或never(从不)
  • checksumPolicy:当Maven将文件部署到仓库时,它还将部署相应的校验文件,可选项 ignore, fail, warn 处理在校验文件缺失或不正确的情况。
  • layout: 仓库布局,可选项 default , legacy

(3)pluginRepositories

插件仓库, Maven plugins是一种特殊的依赖项,与普通的jar包依赖仓库分开定义,结构与repositories类似。

<profiles>
    <profile>
      <pluginRepositories>
        <pluginRepository>
          <id>snapshots</id>
          <name>Snapshots Repositories</name>
          <url>http://ip:8090/nexus/repository/maven-snapshots/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
</profiles>

(4)properties

定义参数,可以在pom文件中通过${属性名}引用,如下示例可以通过${user.install}引用。

<profiles>
    <profile>
      ...
      <properties>
        <user.install>${user.home}/our-project</user.install>
      </properties>
      ...
    </profile>
</profiles>

在pom文件中有几种访问方式可以访问变量

  1. ${env.x} :访问环境变量的x变量的值
  2. ${project.x}:访问pom文件里的x元素的值,
  3. ${settings.x}:访问settings.xml文件里元素的值,比如${settings.offline}对应settings.xml文件中的 <settings><offline>false</offline></settings>
  4. ${x}:访问pom文件中的properties元素下的值

8.activeProfiles

activeProfiles包含一组activeProfile元素,值为profile的id,如果设为true,那么将启用该profile配置。

<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">
 <activeProfiles>

    <activeProfile>env-test</activeProfile>
  </activeProfiles>
</settings>


以上就是setings.xml文件的全部内容了,因为添加了示例代码,有些长了,希望对大家能有所帮助。

欢迎关注我,不定时更新Java、IT技术。

相关推荐

Nat. Synthesis: 重大突破,电化学形成C-S键

第一作者:JunnanLi,HasanAl-Mahayni通讯作者:AliSeifitokaldani,NikolayKornienko通讯单位:蒙特利尔大学,麦吉尔大学【研究亮点】形成C-...

网络安全与应用(二)(网络安全理论与应用)

1、应用层安全协议SHTTP和HTTPS:SHTTP:SecHTTP,安全超文本传输协议,是HTTP扩展,使用TCP的80端口。HTTPS:HTTP+SSL,使用TCP的443端口。大部分web应用...

TN-C、TN-S、TT、IT供电系统详解及对比

TN-C、TN-S、TT、IT供电系统是低压配电系统中常见的四种接地方式,它们各自有不同的特点和适用场景。一、系统介绍TN-C供电系统①定义:整个系统中,工作零线(N线)与保护零线(PE线)是合一的,...

网络应用服务器(三)(网络应用程序服务器)

#头条创作挑战赛#1、DNS协议:域名解析协议,用于把主机域名解析为对应的IP地址。是一个分布式数据库,C/S工作方式。主要基于UDP协议,少数使用TCP,端口号都是53。常用域名如下2、DNS协议...

腾讯发布混元Turbo S:业界首次无损应用Mamba架构

21世纪经济报道记者白杨北京报道2月27日,腾讯正式发布新一代基座模型——混元TurboS。据腾讯混元团队介绍,混元TurboS在架构方面创新性地采用了Hybrid-Mamba-Transfor...

【收藏】低压配电系统中TT IT TN-S/TN-C/TN-C-S 的区别?

低压配电系统的接地型式选择是电气安全设计的核心环节,TT、IT、TN-S、TN-C、TN-C-S这五种主要接地型式因其结构、保护原理和故障特性的显著差异,在工程应用中有不同的适用范围和限制条件。如若发...

金万维公有云平台如何实现C/S架构软件快速SaaS化

金万维作为国内领先的企业信息化垂直B2B平台运营商,拥有超过5000家管理软件合作伙伴,掌握管理软件一线的发展动态,因此深知传统管理软件近年来面对的困境和问题。而SaaS却在软件行业内发展迅猛势如燎原...

随时随地做翻译:B/S架构的传奇时代到来

随着新兴技术的发展和大数据时代的到来,翻译作为连接各国语言和文化的工具,更是具有前所未有的拓展空间。传统的在计算机辅助翻译软件(CAT)上进行翻译的模式,受到时间和空间的限制,导致翻译过程中面临层层障...

BS和CS 架构的介绍(一篇就够了)(cs和bs架构的含义)

简介C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。...

物管王(包租婆)软件架构与B/S和C/S架构的优点和缺点比较

一、B/S系统架构的优点和缺点优点:1)客户端无需安装,有Web浏览器即可。2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。3)BS架构无需升级多个客户端,升级服...

监听器入门看这篇就够了(怎么检查车上有没有被别人安装监听器)

什么是监听器监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。为什么我们要使用监听器?...

购物车【JavaWeb项目、简单版】(java购物车的实现原理)

①构建开发环境免费学习资料获取方式导入需要用到的开发包建立程序开发包②设计实体书籍实体publicclassBook{privateStringid;privat...

基础篇-SpringBoot监听器Listener的使用

1.监听器Listener简介1.1监听器Listener介绍Listener是JavaWeb的三大组件(Servlet、Filter、Listener)之一,JavaWeb中的监听器主要用...

你在 Spring Boot3 整合 JWT 实现 RESTful 接口鉴权时是否遇到难题?

各位后端开发小伙伴们!在日常使用SpringBoot3搭建项目时,RESTful接口的鉴权至关重要。而JWT技术,作为一种简洁且高效的鉴权方式,被广泛应用。但大家是不是在整合过程中遇到过各...

javaWeb RSA加密使用(rsa加密java代码)

加密算法在各个网站运用很平常,今天整理代码的时候看到了我们项目中运用了RSA加密,就了解了一下。先简单说一下RSA加密算法原理,RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要...

取消回复欢迎 发表评论: