【maven】setting.xml文件详解

发布时间:2023年12月28日

Maven 的主要作用

我们使用 Maven 最主要的就是使用它的依赖管理功能。当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,那么我们就可以说 A 依赖 B。

依赖管理中要解决的具体问题:

jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
jar 包之间的依赖:通过依赖的传递性自动完成
jar 包之间的冲突:通过对依赖的配置进行调整,让某些 jar 包不会被导入

一、maven配置文件

Maven 的 settings.xml 文件是 Maven 的主要配置文件之一,用于配置 Maven 构建工具的全局设置。这个文件位于 Maven 安装目录的 conf 文件夹下,或者在用户的 ~/.m2/ 目录下。settings.xml 文件用于配置 Maven 的行为、仓库、代理等信息,是 Maven 构建过程中的重要配置文件。

在实际使用中,针对某一个具体的项目还会有一个maven配置文件pom.xml。settings.xml 用于配置 Maven 的全局环境,而 pom.xml 用于配置具体的 Maven 项目。全局环境配置是全局的,对所有 Maven 项目都起作用,而项目配置仅影响当前项目。

项目级别的配置会优先于全局配置,但并不是所有全局配置都能被项目级别的配置所覆盖。具体覆盖的范围取决于 Maven 的规则和支持的配置项。例如,如果在项目的 pom.xml 文件中配置了自定义的镜像、仓库、或者其他 Maven 构建相关的设置,那么这些项目级别的配置会覆盖 settings.xml 中的全局配置。

1、settings.xml

  • 作用: settings.xml 文件用于配置 Maven 的全局设置,影响整个 Maven 环境。
  • 位置: 通常位于 Maven 的 conf 目录下,全局共享给所有 Maven 项目。
  • 内容: 包括但不限于镜像配置、服务器身份验证信息、全局仓库配置等。
  • 示例: 用于配置 Maven 镜像、服务器信息等全局设置。

2、pom.xml

  • 作用: pom.xml 文件是 Maven 项目的配置文件,用于定义项目的结构、依赖、插件等信息。
  • 位置: 存在于每个 Maven 项目的根目录下。
  • 内容: 包括但不限于项目的坐标信息、依赖、插件配置、构建生命周期等。
  • 示例: 用于配置项目的依赖、插件、构建配置等。

二、setting.xml详解

以下是 settings.xml 文件的一些重要配置项和意义:

1、本地仓库路径 (<localRepository>)

: 配置本地 Maven 仓库的路径。默认情况下,Maven 会在用户的主目录下的 .m2/repository 文件夹中创建本地仓库。该仓库主要用来存储本地构建项目时所需要的依赖库(JAR 文件、插件等)。当 Maven 构建项目时,它会自动下载所需的依赖库并将其存储在本地仓库中,以便在将来的构建中重复使用,从而避免重复下载相同的库。

  • 依赖库: Maven 构建项目时会下载项目所需的依赖库,包括 Java 类库、框架库等。
  • Maven 插件: Maven 本身及构建过程中使用的插件。
  • 构建产物: 构建成功后生成的 JAR 文件、WAR 文件等构建产物。
  • POM 文件(pom.xml): Maven 项目的配置文件。
  • 其他 Maven 相关文件: 例如 Maven Wrapper(mvnw, mvnw.cmd)等。
<localRepository>/path/to/local/repository</localRepository>

2、远程仓库 (<mirrors>):

配置 Maven 使用的远程仓库的镜像。可以配置多个镜像,提高依赖库的下载速度。

<mirrors>
    <mirror>
        <id>mirrorId</id>
        <url>https://maven.example.com/repository/maven-public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
  • <id>: 此镜像的唯一标识符,可以是任何字符串,用于区分不同的镜像。
  • <url>: 镜像仓库的基本 URL。当 Maven 需要从 Maven 仓库获取依赖库时,它将使用此 URL 替代中央 Maven 仓库的 URL。在这个示例中,使用了https://maven.example.com/repository/maven-public/作为镜像仓库的基本 URL。
  • <mirrorOf>: 指定了该镜像适用于哪个 Maven 仓库。在这个示例中,mirrorOf 设置为
    central,表示这个镜像仅适用于中央 Maven 仓库。这样的配置告诉 Maven,当它需要从中央 Maven 仓库获取依赖库时,应该使用这个镜像仓库而不是直接访问中央 Maven 仓库。镜像仓库的目的是为了提高依赖库的下载速度。其他 Maven 仓库(如其他第三方仓库或私有仓库)仍然会直接从它们自己的源地址获取依赖库。
    如果<mirrorOf>被设置为 *,表示这个镜像对所有 Maven 仓库都生效,即所有的 Maven 仓库都会使用这个镜像。这在某些情况下可能是有用的,特别是在没有直接访问外网的情况下使用本地或内部镜像。
    如果有多个镜像配置都匹配了同一个 <mirrorOf>,Maven 会按照 <mirrors> 中的顺序选择第一个匹配的镜像。
  • <name> 是用来指定镜像的名称的。这个名称通常是一个描述性的字符串,用于标识镜像的用途或提供一些有关镜像的信息。不会对 Maven 的行为产生影响,仅仅是用来提供对镜像的描述或标识。开发者可以根据需要随意设置这个名称。

3、代理 (<proxies>):

配置 Maven 使用的代理服务器信息。在 Maven 构建项目时,如果你的网络环境需要通过代理服务器才能访问外部资源(如 Maven 仓库、外部库等),就需要配置 Maven 使用的代理服务器信息。代理服务器通常用于过滤、缓存和管理网络请求,特别是在企业网络中。如果网络环境中没有代理服务器,这些配置通常是不需要的。

<proxies>
    <proxy>
        <id>example-proxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>proxy.example.com</host>
        <port>8080</port>
        <username>proxyuser</username>
        <password>somepassword</password>
        <nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
    </proxy>
</proxies>

<id>: 代理的唯一标识符,可以是任何字符串。
<active>: 是否启用该代理。设置为 true 表示启用,false 表示禁用。
<protocol>: 代理协议,可以是 http、https 等。
<host>: 代理服务器主机名或 IP 地址。
<port>: 代理服务器端口号。
<username><password>: 如果代理服务器需要身份验证,这里设置用户名和密码。
<nonProxyHosts>: 一个逗号分隔的主机名模式列表,指定不使用代理的主机。例如,可以排除某些特定的主机名不通过代理访问。

4、服务器 (<servers>):

配置 Maven 使用的服务器信息,包括仓库服务器、身份验证等。可以配置多个仓库服务器和身份验证信息。这样做的主要目的是允许从不同的仓库获取依赖,并且这些仓库可能需要不同的身份验证。下面是一个示例,其中包含多个服务器的配置:

<servers>
    <server>
        <id>dev-repo</id>
        <username>dev-user</username>
        <password>dev-password</password>
    </server>
    <server>
        <id>prod-repo</id>
        <username>prod-user</username>
        <password>prod-password</password>
    </server>
    <!-- 可以添加更多的服务器配置 -->
</servers>

<server> 元素定义了一个服务器配置,其中包括 <id>(用于唯一标识服务器)、<username>(用户名)和 <password>(密码)。

有两个 <server> 元素分别表示两个不同的服务器配置,其 <id> 分别为 dev-repoprod-repo
<id>在 Maven 中通常对应于 settings.xml 中 <servers> 部分的 <server> 元素的一个条目,也对应于项目的 <distributionManagement><repositories> 部分的 <id> 属性。

5、像仓库 (<pluginGroups>):

配置 Maven 使用的插件镜像仓库。

<pluginGroups>
    <pluginGroup>com.example.plugins</pluginGroup>
</pluginGroups>

6、配置(<profiles>)**:

在 Maven 中,<profiles> 元素用于定义一组配置,这些配置可以根据不同的环境或需求进行选择性的激活。通过使用 profiles,你可以为项目定义不同的构建配置,并在构建时选择性地激活这些配置,以适应不同的场景。

一个简单的 <profiles> 示例可能如下所示:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <environment>development</environment>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <environment>production</environment>
        </properties>
    </profile>
</profiles>

在这个示例中,定义了两个 profiles:devprod。每个 profile 都有一个唯一的 <id> 用于标识,以及一组配置(在这里是 <properties> 元素)。这里使用了 <properties> 来设置一些属性,这些属性可以在项目中的其他地方引用。

要在构建过程中激活一个特定的 profile,可以使用 -P 选项:

mvn clean install -Pdev

这将激活 dev profile,并将 environment 属性设置为 development。如果不提供 -P 选项,Maven 将使用默认配置。通过使用 profiles,你可以根据需要灵活地定制项目的构建过程,使得同一份项目代码可以在不同的环境中以不同的方式构建。

  • <activation> 元素用于定义何时激活该 profile。可以根据多种条件来激活 profile,例如环境变量、操作系统、文件存在等。以下是一个示例:
  • <repositories> 元素用于在 profile 中定义特定的仓库配置。这允许你为每个 profile 定义不同的 Maven 仓库,以满足特定的构建需求。以下是一个示例:
<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <repositories>
            <repository>
                <id>dev-repo</id>
                <url>https://dev.example.com/maven2</url>
            </repository>
        </repositories>
        <!-- ... 其他配置 ... -->
    </profile>
    <profile>
        <id>prod</id>
        <repositories>
            <repository>
                <id>prod-repo</id>
                <url>https://prod.example.com/maven2</url>
            </repository>
        </repositories>
        <!-- ... 其他配置 ... -->
    </profile>
</profiles>

<activeByDefault>true</activeByDefault> 表示 dev profile 将默认激活。这意味着如果用户没有显式指定其他 profile,Maven 将使用 dev profile 进行构建。

<jdk>1.8</jdk> 表示激活 dev profile 的条件之一是 JDK 版本为 1.8。这意味着只有在使用 JDK 1.8 时才会激活 dev profile。如果你在其他 JDK 版本下构建,将不会激活 dev profile。

dev profile 中定义了一个 Maven 仓库,其 <id>dev-repo,URL 为 https://dev.example.com/maven2。这是为了在 dev 环境中使用指定的 Maven 仓库。

prod profile 中定义了另一个 Maven 仓库,其 <id>prod-repo,URL 为https://prod.example.com/maven2。这是为了在 prod 环境中使用另一个 Maven 仓库。

这种配置允许你在不同的构建环境中使用不同的 Maven 仓库,并在特定条件下激活 dev profile。

三、总体而言

settings.xml 文件中的这些配置项可以根据项目的需求进行定制。在实际的 Maven 项目中,通过修改 settings.xml 文件,可以对 Maven 的行为进行全局的配置,从而满足项目的特定需求。

参考文件【maven官方文件】 https://maven.apache.org/ref/3.9.6/

文章来源:https://blog.csdn.net/weixin_45188218/article/details/135153519
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。