【maven】setting.xml文件详解

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、本地仓库路径 ()

: 配置本地 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/repositorylocalRepository>

2、远程仓库 ():

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

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

3、代理 ():

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

<proxies>
    <proxy>
        <id>example-proxyid>
        <active>trueactive>
        <protocol>httpprotocol>
        <host>proxy.example.comhost>
        <port>8080port>
        <username>proxyuserusername>
        <password>somepasswordpassword>
        <nonProxyHosts>www.google.com|*.example.comnonProxyHosts>
    proxy>
proxies>

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

4、服务器 ():

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

<servers>
    <server>
        <id>dev-repoid>
        <username>dev-userusername>
        <password>dev-passwordpassword>
    server>
    <server>
        <id>prod-repoid>
        <username>prod-userusername>
        <password>prod-passwordpassword>
    server>
    
servers>

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

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

5、像仓库 ():

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

<pluginGroups>
    <pluginGroup>com.example.pluginspluginGroup>
pluginGroups>

6、配置()**:

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

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

<profiles>
    <profile>
        <id>devid>
        <properties>
            <environment>developmentenvironment>
        properties>
    profile>
    <profile>
        <id>prodid>
        <properties>
            <environment>productionenvironment>
        properties>
    profile>
profiles>

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

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

mvn clean install -Pdev

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

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

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

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

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

prod profile 中定义了另一个 Maven 仓库,其 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/

你可能感兴趣的:(maven,xml,服务器)