Maven第四章:配置文件详解

前言

本章重点知识:掌握setting.xml配置文件以及pom.xml配置文件

setting.xml配置文件

setting.xml文件用于配置Maven的运行环境,包括本地仓库的位置、镜像仓库的配置、认证信息等。以下是setting.xml文件的详细说明:

  1. 文件位置:
  • 全局配置文件:${M2_HOME}/conf/settings.xml,对操作系统所有者生效。
  • 用户配置文件:user.home/.m2/settings.xml,只对当前操作系统的使用者生效。
  1. 配置文件优先级:
  • 局部配置优先于全局配置。配置优先级从高到低为:pom.xml > user settings > global settings。
  • 如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
  • 如果全局配置和用户配置都存在,它们的内容将被合并,并且用户范围的settings.xml会覆盖全局的settings.xml。
  1. 配置项说明:
  • <localRepository>:指定本地仓库的位置,Maven会在这个目录下查找依赖项。
  • <mirror>:定义镜像仓库的配置,包括镜像仓库的ID、URL和镜像范围。通过配置多个``元素,可以实现多个镜像仓库的配置。
  • <server>:用于配置认证信息,包括服务器ID、username和password。在从远程仓库下载依赖项时,需要使用这些认证信息进行身份验证。
  • <profile>:用于定义一个或多个配置文件,可以包含多个元素,每个元素对应一个特定的配置文件。通过在命令行中传递不同的-P参数,可以激活不同的配置文件。
  • <activeProfiles>:用于指定默认激活的配置文件。如果没有传递任何-P参数,Maven会使用这里指定的配置文件。
  • <pluginGroups>:用于指定额外的插件组,可以通过-pluginGroup参数来指定要使用的插件组。
  • <proxies>:用于配置代理服务器的设置,包括代理服务器的ID、地址和端口等信息。如果需要使用代理服务器下载依赖项,需要在这里进行配置。

Maven 的 settings.xml 文件是用于配置 Maven 运行环境和构建行为的配置文件。

localRepository
  1. 在文件中找到 <repositories> 标签,这是配置私有仓库的地方。
  2. 标签中添加你的私有仓库配置。每个仓库需要一个 标签,其中包含仓库的 ID、URL 和其它相关信息。例如:
<localRepository>/path/to/local/repo</localRepository>
pluginGroups
  1. 在文件中找到 <pluginGroups> 标签,这是配置私有仓库的地方。
  2. pluginGroup 标签中添加你的私有插件组。例如:
<pluginGroups>
    <pluginGroup>com.your.plugins</pluginGroup>
  </pluginGroups>
servers
  1. 在文件中找到 <servers> 标签,这是配置私有仓库的地方。
  2. server 标签中添加你的私有仓库账户、密码。每个server标签,其中包含 ID、username和password相关信息。例如:

deploymentRepo repouser repopwd

repositories
  1. 在文件中找到 <repositories> 标签,这是配置私有仓库的地方。
  2. repository 标签中添加你的私有仓库配置。每个私有仓库服务包含ID、URL 相关信息。例如:
<repositories>  
  <repository>  
    <id>my-private-repo</id>  
    <url>http://my-private-repo.example.com/repo/</url>  
  </repository>  
</repositories>
mirrors
  1. 在文件中找到 <mirrors> 标签,配置多个镜像。
  2. mirror 标签中添加你的镜像配置。每个镜像需要一个 mirror 标签,其中包含仓库的 ID、name、URL、mirrorOf 相关信息。例如:
<mirrors>
	 <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>
properties
  1. 在文件中找到 <properties> 标签
  2. properties 标签中添加你全局属性
<properties>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    <maven.compiler.source>1.8</maven.compiler.source>  
    <maven.compiler.target>1.8</maven.compiler.target>  
  </properties>
pom.xml配置文件

pom.xml文件是Maven项目的核心配置文件,用于定义项目的构建信息、依赖项、插件等。以下是pom.xml文件的详细说明:

  • 文件位置:
  • Maven项目的根目录下。
  • 配置项说明:
  • <project>:指定项目的唯一标识符、名称、版本号等信息。
  • <modelVersion>:指定项目对象的模型版本号,通常为4.0.0。
  • <groupId>:指定项目的组ID,通常为公司或组织的唯一标识符。
  • <artifactId>:指定项目的Artifact ID,通常为项目的唯一标识符。
  • <version>:指定项目的版本号。
  • <packaging>:指定项目的打包方式,如jar、war等。
  • <name>:指定项目的名称。
  • <url>:指定项目的URL地址。
  • <properties>:用于定义项目相关的属性,可以在这里配置一些自定义的属性。
  • <dependencies>:用于定义项目的依赖项,可以在这里添加多个``元素来指定具体的依赖项。每个依赖项包括groupId、artifactId和version等信息。
  • <repositories>:用于定义项目使用的存储库,可以在这里添加多个``元素来指定具体的存储库信息。
  • <build>:用于定义项目的构建配置,包括编译、打包、测试等过程。可以在这里配置一些插件、构建脚本等信息。
  • <reporting>:用于定义项目报告的生成方式,包括文档生成、测试报告等。可以在这里配置一些插件、报告模板等信息。
  • 配置文件优先级:
  • 子模块继承父模块的配置,元素会继承父模块的配置,其他元素不会继承。如果子模块中定义了相同的元素,会覆盖父模块中的配置。
  • 其他说明:
  • pom.xml文件是XML格式的文件,使用``标签来定义不同的配置项。
  • 在pom.xml文件中,可以使用一些特殊的标记,如``用于包含特殊字符的文本。
  • pom.xml文件中的配置项可以根据需要进行调整和扩展,以满足具体的项目需求。
  1. 添加Maven插件:将maven-compiler-plugin插件添加到构建中,用于编译Java源代码。版本号为3.8.1,源代码编译版本号为1.8,目标运行环境版本号为1.8。配置如下:
<build>  
  <plugins>  
    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-compiler-plugin</artifactId>  
      <version>3.8.1</version>  
      <configuration>  
        <source>1.8</source>  
        <target>1.8</target>  
      </configuration>  
    </plugin>  
  </plugins>  
</build>
  1. 添加资源文件:将src/main/resources目录下的所有文件作为资源文件,并在构建时进行过滤处理。例如,可以在资源文件中包含配置文件和图片等,并在构建时将它们复制到目标目录中。
<build>  
  <resources>  
    <resource>  
      <directory>src/main/resources</directory>  
      <filtering>true</filtering>  
    </resource>  
  </resources>  
</build>
  1. 定义构建阶段和命令:将maven-jar-plugin插件添加到构建中,并在compile阶段执行该插件的jar目标。这将生成一个JAR文件。
<build>  
  <plugins>  
    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-jar-plugin</artifactId>  
      <version>3.2.0</version>  
      <executions>  
        <execution>  
          <id>make-a-jar</id>  
          <phase>compile</phase>  
          <goals>  
            <goal>jar</goal>  
          </goals>  
        </execution>  
      </executions>  
    </plugin>  
  </plugins>  
</build>
  1. 定义项目依赖项:
<dependencies>  
  <dependency>  
    <groupId>com.google.guava</groupId>  
    <artifactId>guava</artifactId>  
    <version>28.2-jre</version>  
  </dependency>  
  <dependency>  
    <groupId>org.apache.commons</groupId>  
    <artifactId>commons-lang3</artifactId>  
    <version>3.12.0</version>  
  </dependency>  
</dependencies>
  1. 定义统一版本管理

dependencyManagement 标签来定义统一版本管理 。。在 标签内部,可以添加 标签来指定项目所依赖的外部库、组件或服务。每个依赖项由一个或多个 标签组成,每个 标签包含以下属性:

  • groupId:依赖项的组织ID,用于唯一标识依赖项的提供者。
  • artifactId:依赖项的唯一ID,用于唯一标识依赖项。
  • version:依赖项的版本号。

通过在 dependencyManagement 标签中指定依赖项的版本号,可以确保项目中所有依赖项的版本号都是一致的,避免了因版本号不一致而引起的冲突问题。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.example</groupId>  
  <artifactId>my-project</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <dependencyManagement>  
    <dependencies>  
      <dependency>  
        <groupId>com.google.guava</groupId>  
        <artifactId>guava</artifactId>  
        <version>28.2-jre</version>  
      </dependency>  
      <dependency>  
        <groupId>org.apache.commons</groupId>  
        <artifactId>commons-lang3</artifactId>  
        <version>3.12.0</version>  
      </dependency>  
    </dependencies>  
  </dependencyManagement>  
</project>
  1. 配置中央仓库 :在pom.xml文件中,找到repositories标签。添加一个repository标签,用于指定中央仓库的URL。以下是一个示例:
<repositories>  
  <repository>  
    <id>central</id>  
    <name>Central Repository</name>  
    <url>https://repo.maven.apache.org/maven2</url>  
  </repository>  
</repositories>
pom.xml 与setting.xml配置优先级如何?

pom.xml是Maven项目的核心配置文件,用于定义项目的构建信息、依赖项、插件等。它包含了项目的构建配置和依赖关系,是每个Maven项目的必需文件。

setting.xml是Maven的全局配置文件,用于设置Maven运行的环境和参数。它包含了Maven的运行配置,如本地仓库的位置、镜像仓库的配置、代理服务器的设置等。

当pom.xml和setting.xml中的配置发生冲突时,通常来说,pom.xml中的配置具有更高的优先级。这是因为pom.xml是针对特定项目的配置文件,它包含了项目的具体构建信息和依赖关系,而这些信息是在项目构建过程中直接使用的。而setting.xml中的配置是全局性的,它对所有的Maven项目都生效,但不会影响具体的项目构建过程。

其他中央仓库

国内有一些Maven镜像库可供使用,其中比较知名的包括:

  1. 阿里云镜像仓库:https://maven.aliyun.com/repository/public
  2. 华为云镜像仓库:https://mirrors.huaweicloud.com/repository/maven/

这些镜像库通常会提供与中央仓库类似的存储库服务,包括对Maven依赖项的存储和管理。使用国内镜像库可以加快依赖项的下载速度,同时也可以避免在国际网络环境下可能遇到的问题,如网络延迟、连接不稳定等。

要使用国内镜像库,需要在pom.xml文件中进行相应的配置。一种方法是配置镜像仓库的地址,将地址替换为国内镜像库的地址。另一种方法是配置Maven设置文件(settings.xml),在其中添加相应的镜像仓库配置。