3. 配置文件
Maven 的配置文件主要分为两类:
全局配置:- 系统配置:位于 Maven 安装目录下的 conf/settings.xml 文件中的设置,适用于所有用户和项目。
- 用户配置:位于用户主目录下的 .m2/settings.xml 文件中的设置,适用于该用户的所有项目。
项目配置:位于项目根目录下的 pom.xml 文件中的设置,适用于该项目。
Maven 的配置优先级通常遵循以下规则:系统配置 < 用户配置 < 项目配置,这种优先级的设计允许用户在需要的情况下重写全局和用户级别的配置,以便更好地满足项目的需求。
3.1 全局配置
在 Maven 中,全局配置文件(settings.xml)可以配置多种属性,以满足项目的需求并优化构建过程。以下是一些主要的全局配置属性及其用途:
- 本地仓库:
<localRepository>指定本地 Maven 仓库的位置,默认情况下 Maven 将其存储在用户主目录下的 .m2/repository 中。 - 私有仓库:
<servers>存储与私有仓库交互的身份验证信息,如用户名和密码,适用于需要身份验证的私有远程仓库,主要用于项目的发布和部署。 - 代理设置:
<proxies>配置 HTTP/HTTPS 代理信息,以便在有网络限制的环境中使用 Maven。 - 仓库镜像:
<mirrors>配置 Maven 仓库的镜像,以加速依赖的下载。 - 配置分组:
<profile>定义多个配置文件,以便为不同的环境或构建需求设置不同的属性。 - 配置激活:
<activeProfiles>可以激活特定的配置文件,使其在构建过程中生效。
<profiles> 和 <activeProfiles> 提供了一种灵活的方式来管理和定制项目的构建过程,但一般很少需要在全局配置文件中去配置,基本上只有在项目配置文件中会涉及。
配置示例:
<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>/home/user/.m2/repository</localRepository>
<servers>
<server>
<id>my-repo</id>
<username>my-username</username>
<password>my-password</password>
</server>
</servers>
<proxies>
<proxy>
<id>example-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.example.com</host>
<port>8080</port>
</proxy>
</proxies>
<mirrors>
<mirror>
<id>central-mirror</id>
<url>http://mirror.example.com/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>dev</id>
<properties>
<example.property>value</example.property>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>
3.2 项目配置
在 Maven 中,项目配置通常通过 pom.xml 文件进行管理。pom.xml(Project Object Model)是 Maven 项目的核心配置文件,定义了项目的基本信息、构建配置、依赖关系等。
基础信息
-
<groupId>:定义项目组的唯一标识(通常是公司域名的反写,如 com.example)。 -
<artifactId>:项目的标识符,与 groupId 组合唯一确定一个项目。 -
<version>:项目版本。 -
<packaging>:可选字段,默认为 jar,构件的打包方式,还可以是 war、pom 等。 -
<classifier>:可选字段,默认为空,用于标识同一构件在不同环境、配置下的变体,如 sources或 javadoc。
描述信息
-
<name>:项目的名称,用于显示在构建报告和生成的站点中。 -
<description>:项目的简要描述,说明项目的功能、用途等。 -
<url>:项目的主页URL,通常指向项目的官方网站或代码仓库的主页。 -
<inceptionYear>:项目的起始年份,用于版权声明。 -
<licenses>:项目的许可证信息,通常包含<license>子标签,描述许可证的名称、URL 和分发方式。 -
<organization>:项目所属的组织信息,包括组织的<name>和<url>,通常用于表示项目归属的公司或机构。 -
<developers>:项目的开发人员信息,包含多个<developer>子标签,用于描述每个开发者的<id>、<name>、<email>、<roles>等信息。 -
<contributors>:项目的贡献者列表,结构与<developers>类似,但通常用于非核心开发人员。 -
<issueManagement>:项目的问题跟踪系统信息,用于指定问题跟踪系统的<system>名称(如 JIRA、GitHub)和<url>。 -
<ciManagement>:项目的持续集成系统信息,包含<system>名称和<url>,用于指向 CI 系统(如 Jenkins 或 GitHub Actions)的配置页面。 -
<mailingLists>:项目的邮件列表信息,用于团队沟通或社区交流。包含<name>、<subscribe>和<unsubscribe>链接。 -
<scm>:源码管理信息,包含<connection>、<developerConnection>和<url>等信息,指向源码的版本控制地址(如 Git 仓库 URL)。
属性管理
<properties>:用于定义自定义的属性,可以在 pom.xml 中其他位置通过${propertyName}语法引用,常用于统一配置版本号、目录路径等,使项目配置更加灵活和可维护。
仓库管理
<repositories>:配置项目依赖的远程仓库列表。<pluginRepositories>:用于配置插件的远程仓库列表,插件仓库和依赖仓库是分开的,<pluginRepositories>用于指定下载插件的仓库源。
发布管理
<distributionManagement>:配置构件发布的信息,包括构件和站点的发布仓库,通常用于发布正式版本到远程仓库或站点服务器中。
依赖管理
<dependencies>:定义当前项目的依赖列表,每个依赖可以配置 groupId、artifactId、version、scope 等信息。<dependencyManagement>:用于定义依赖的版本、范围等,以供子模块使用,但不会自动引入依赖。子模块可以引用<dependencyManagement>中定义的依赖并继承其版本和配置,便于统一管理。
父子模块
<parent>:指定当前项目的父 POM,父项目通常包含公共的依赖、插件配置和版本管理信息,子项目可以继承这些配置,减少重复配置并保持项目一致性。<modules>:用于声明当前项目包含的子模块,Maven 会将<modules>中定义的模块识别为多模块项目,适合于管理多个关联的子项目。
构建配置
<build>:用于配置构建过程的详细信息,包括构建的最终名称(<finalName>)、构建输出目录、资源目录、插件等,构建信息定义了项目如何被编译、打包和处理。
配置分组
<profiles>:定义构建配置的多种环境,通过<profiles>可以为不同的环境或需求创建不同的配置,例如开发和生产环境,或不同的数据库设置。