一文详解Maven的setting文件

 更新时间:2024年02月19日 09:37:48   作者:柏油  
maven 是目前java 常见的一款包管理工具,通过 maven 我们可以很方便的对项目进行编译、打包、部署等操作,本文将详细带大家了解一下Maven setting文件,需要的朋友可以参考下

前言

maven 是目前java 常见的一款包管理工具,通过 maven 我们可以很方便的对项目进行编译、打包、部署等操作。

setting.xml 文件是 Maven 的主要配置文件,它包含了 Maven 运行时需要的配置信息。这个文件通常位于~/.m2/目录下。我们也可以手动指定,如下(idea举例):

通过 setting 配置文件,我们可以改变参数项,来控制以上操作的具体行为,接下来我们将具体讲讲 settting 配置文件

结构

setting.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
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

下面是各个元素的含义:

  • localRepository:本地仓库的位置,如果没有设置,Maven会使用默认的~/.m2/repository。
  • interactiveMode:交互模式的开关,如果设置为true,Maven会在需要输入时提示用户。
  • usePluginRegistry:是否使用插件注册表,如果设置为true,Maven会使用~/.m2/plugin-registry.xml文件。
  • offline:离线模式的开关,如果设置为true,Maven不会尝试连接网络。
  • pluginGroups:插件组列表,Maven会在这些组中搜索插件。
  • servers:定义了一些服务器的配置,包括服务器的 ID、用户名和密码。这些服务器通常用于发布(deploy)项目。
  • mirrors:镜像配置,可以设置Maven从哪个镜像站点下载依赖。
  • proxies:代理配置,可以设置Maven通过哪个代理服务器连接网络。
  • profiles:配置文件,可以包含一组特定的设置,如特定的代理服务器、镜像站点等。
  • activeProfiles:激活的配置文件列表,Maven会使用这些配置文件中的设置。

值得注意的是,settings.xml文件中的设置可以被pom.xml文件中的设置覆盖。

重点结构说明

localRepository

用于指定本地仓库位置,即 jar 包下载存储的位置(使用时优先从本地仓库加载,没有时再去远程仓库加载)

  <localRepository>D:\xxx\mvn\repository</localRepository>

server

一般用于定义远程私服的认证信息:

    <server>
      <id>releases</id>
      <username>zhangsan</username>
      <password>123456</password>
    </server>

在这个示例中,我们定义了一个服务器,其ID为releases,用户名为zhangsan,密码为123456。

然后,就可以在pom.xml文件中引用这个服务器。例如,如果你想从这个服务器下载依赖,可以这样配置:

<repositories>
  <repository>
    <id>releases</id>
    <url>http://example.com/repo</url>
  </repository>
</repositories>

或者,如果你想把项目部署到这个服务器,你可以这样配置:

<distributionManagement>
  <repository>
    <id>releases</id>
    <url>scp://example.com/path/to/repo</url>
  </repository>
</distributionManagement>

在这两个例子中,元素的值与settings.xml文件中的服务器ID相匹配,所以Maven会使用对应的用户名和密码进行身份验证。

注意:出于安全考虑,不建议在settings.xml文件中明文存储密码。你可以使用Maven的密码加密功能来加密密码。

如果定义了多个 repository,maven 会如何选择?

  • Maven会按照它们在pom.xml文件中的顺序来使用这些仓库。

  • 当Maven需要下载一个依赖或插件时,它会首先从第一个仓库尝试下载。如果第一个仓库中没有这个依赖或插件,或者下载失败,那么Maven会尝试从第二个仓库下载,以此类推,直到下载成功或者所有的仓库都尝试过。

mirrors

定义了一些镜像的配置,包括镜像的 ID、名称和 URL,通常用于下载依赖:

<mirrors>
  <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>    

在这个示例中,我们定义了一个镜像站点,其ID为alimaven,URL为maven.aliyun.com/nexus/conte…

当Maven需要从central仓库下载依赖时,它会检查settings.xml文件中的镜像配置,如果找到了匹配的镜像,它会从镜像站点下载依赖,而不是从原始仓库下载。

元素的值可以是一个仓库ID,也可以是一个仓库ID的列表,用逗号分隔。如果值为*,表示这个镜像是所有仓库的镜像。

值得注意的是:如果你定义了多个匹配的镜像,Maven会使用第一个匹配的镜像。

通常用于配置公开的、不需要身份验证的镜像站点。这些镜像站点是公开仓库的复制品,用于加快下载速度和提高可用性,然而,有些镜像站点可能需要身份验证,如:

  • 镜像站点是私有的,只对特定的用户或组织开放。

  • 镜像站点提供了付费的高级服务,需要用户登录才能使用。

这里也借助 server 提供认证信息:

<servers>
  <server>
    <id>alimaven</id>
    <username>myuser</username>
    <password>mypassword</password>
  </server>
</servers>

Maven会根据mirror元素的id查找对应的server元素,并使用其中的认证信息。

profiles

profiles元素用于定义一组特定的项目设置,这些设置只有在特定的条件满足时才会生效。

每个profile元素定义了一组设置,这些设置可以包括目标环境的特定配置、依赖管理、插件配置等

<profiles>
  <profile>
    <id>development</id>
    <repositories>
      <repository>
        <id>dev-repo</id>
        <url>http://dev.example.com/maven2</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </repository>
    </repositories>
    <pluginRepositories>
      <pluginRepository>
        <id>dev-plugin-repo</id>
        <url>http://dev.example.com/maven2</url>
      </pluginRepository>
    </pluginRepositories>
  </profile>
</profiles>

在这个示例中,我们在development配置文件中定义了一个repositories元素和一个pluginRepositories元素。

  • repositories元素用于定义项目的依赖仓库。这里,我们定义了一个仓库dev-repo,其URL为dev.example.com/maven2 当Maven处理项目的依赖时,它会从这个仓库下载依赖。
  • pluginRepositories元素用于定义项目的插件仓库。这里,我们定义了一个插件仓库dev-plugin-repo,其URL为dev.example.com/maven2 当Maven处理项目的插件时,它会从这个仓库下载插件。
  • 其中,releasessnapshots用于控制Maven是否从这个仓库下载release版本和snapshot版

activeProfiles

结合 pofiles 元素,activeProfiles主要用于指定默认激活的Profile:

  <activeProfiles>
    <activeProfile>development</activeProfile>
  </activeProfiles>

到此这篇关于一文带你深入了解Maven setting文件的文章就介绍到这了,更多相关Maven setting文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解IntelliJ IDEA创建spark项目的两种方式

    详解IntelliJ IDEA创建spark项目的两种方式

    这篇文章主要介绍了详解IntelliJ IDEA创建spark项目的两种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Java IO流之字符缓冲流实例详解

    Java IO流之字符缓冲流实例详解

    这篇文章主要介绍了Java IO流之字符缓冲流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 详解Java执行groovy脚本的两种方式

    详解Java执行groovy脚本的两种方式

    这篇文章主要介绍了Java执行groovy脚本的两种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • idea2023.3安装及配置详细图文教程

    idea2023.3安装及配置详细图文教程

    IDEA全称IntelliJ IDEA,是Java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具,这篇文章主要给大家介绍了关于idea2023.3安装及配置的相关资料,需要的朋友可以参考下
    2023-11-11
  • java图搜索算法之DFS与BFS详解

    java图搜索算法之DFS与BFS详解

    这篇文章主要为大家介绍了java数据结构中可以秒杀一切图算法的DFS与BFS作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • SpringBoot实现本地上传文件到resources目录

    SpringBoot实现本地上传文件到resources目录

    Java后端项目上传文件是一个很常见的需求,这篇文章主要为大家介绍了SpringBoot如何实现本地上传文件到resources目录永久保存下载,需要的可以参考一下
    2023-07-07
  • SpringBoot使用 Sleuth 进行分布式跟踪的过程分析

    SpringBoot使用 Sleuth 进行分布式跟踪的过程分析

    Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题,Spring Boot Sleuth是Spring Cloud的一部分,它提供了分布式跟踪的功能,本文将介绍如何在Spring Boot应用程序中使用Sleuth进行分布式跟踪,感兴趣的朋友一起看看吧
    2023-10-10
  • 详解SpringMVC @RequestBody接收Json对象字符串

    详解SpringMVC @RequestBody接收Json对象字符串

    这篇文章主要介绍了详解SpringMVC @RequestBody接收Json对象字符串,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • springcloud使用feign调用服务时参数内容过大问题

    springcloud使用feign调用服务时参数内容过大问题

    这篇文章主要介绍了springcloud使用feign调用服务时参数内容过大问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • ReadWriteLock接口及其实现ReentrantReadWriteLock方法

    ReadWriteLock接口及其实现ReentrantReadWriteLock方法

    下面小编就为大家带来一篇ReadWriteLock接口及其实现ReentrantReadWriteLock方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论