我们使用 Maven 最主要的就是使用它的依赖管理功能。当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,那么我们就可以说 A 依赖 B。
依赖管理中要解决的具体问题:
jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
jar 包之间的依赖:通过依赖的传递性自动完成
jar 包之间的冲突:通过对依赖的配置进行调整,让某些 jar 包不会被导入
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 中的全局配置。
settings.xml
:pom.xml
:以下是 settings.xml 文件的一些重要配置项和意义:
: 配置本地 Maven 仓库的路径。默认情况下,Maven 会在用户的主目录下的 .m2/repository 文件夹中创建本地仓库。该仓库主要用来存储本地构建项目时所需要的依赖库(JAR 文件、插件等)。当 Maven 构建项目时,它会自动下载所需的依赖库并将其存储在本地仓库中,以便在将来的构建中重复使用,从而避免重复下载相同的库。
<localRepository>/path/to/local/repository</localRepository>
配置 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 设置为<mirrorOf>
被设置为 *
,表示这个镜像对所有 Maven 仓库都生效,即所有的 Maven 仓库都会使用这个镜像。这在某些情况下可能是有用的,特别是在没有直接访问外网的情况下使用本地或内部镜像。<mirrorOf>
,Maven 会按照 <mirrors>
中的顺序选择第一个匹配的镜像。<name>
是用来指定镜像的名称的。这个名称通常是一个描述性的字符串,用于标识镜像的用途或提供一些有关镜像的信息。不会对 Maven 的行为产生影响,仅仅是用来提供对镜像的描述或标识。开发者可以根据需要随意设置这个名称。配置 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>
: 一个逗号分隔的主机名模式列表,指定不使用代理的主机。例如,可以排除某些特定的主机名不通过代理访问。
配置 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-repo
和 prod-repo
。
<id>
在 Maven 中通常对应于 settings.xml 中 <servers>
部分的 <server>
元素的一个条目,也对应于项目的 <distributionManagement>
或 <repositories>
部分的 <id>
属性。
配置 Maven 使用的插件镜像仓库。
<pluginGroups>
<pluginGroup>com.example.plugins</pluginGroup>
</pluginGroups>
在 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:dev
和 prod
。每个 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/