有关 maven 其他配置讲解参考
maven 配置文件 setting.xml 详解
pom.xml 文件是 Maven 项目的核心配置文件,其中包含了项目的元数据、构建配置、依赖管理等信息。以下是一个 pom.xml 文件的主要部分:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</version>
<!-- 项目依赖配置 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.8.RELEASE</version>
</dependency>
<!-- 其他依赖配置 -->
</dependencies>
<!-- 构建配置 -->
<build>
<!-- 插件配置等 -->
</build>
<!-- 其他配置 -->
</project>
<project>
元素: 顶层元素,定义整个 Maven 项目。<modelVersion>
元素: Maven 模型的版本号,当前版本为 4.0.0。
<groupId>
元素: 项目组标识符,通常采用反转的域名风格。
<artifactId>
元素: 项目的唯一标识符。
<version>
元素: 项目的版本号。
<packaging>
元素用于指定 Maven 项目的打包方式,即最终产物的类型。该元素位于 pom.xml 文件的 <project>
元素下。以下是 <packaging>
元素的常见取值:
jar
(默认值): 生成 JAR 文件。
<packaging>jar</packaging>
war
: 生成 WAR 文件,用于部署到 Java Web 容器(如 Tomcat)。
<packaging>war</packaging>
pom
: 用于聚合其他 Maven 项目,不生成实际的构建产物。 POM 项目可以用于聚合多个子项目,将它们组织成一个逻辑单元。父项目的 POM 文件中可以包含一些通用的配置信息,例如依赖管理、插件配置等,这样子项目可以继承这些配置,减少重复的配置工作。使用 POM 项目作为父项目进行项目聚合在微服务系统中是一种常见的做法
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging> <!-- 聚合项目的打包方式为 POM -->
<!-- 子项目列表 -->
<modules>
<module>module1</module>
<module>module2</module>
<!-- ... 其他子项目 ... -->
</modules>
<!-- 其他聚合项目的配置 -->
</project>
ear
: 生成 Enterprise Archive(EAR)文件,用于部署到 Java EE 应用服务器。
<packaging>ear</packaging>
maven-plugin
: 用于构建 Maven 插件。
<packaging>maven-plugin</packaging>
bundle
: 用于构建 OSGi bundle。
<packaging>bundle</packaging>
其他自定义类型: Maven 允许用户定义自己的打包类型,例如一些特定的构建工具或应用程序类型。
<project>
<!-- 其他项目配置 -->
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<!-- 指定打包方式为 JAR -->
<packaging>jar</packaging>
<!-- 其他项目配置 -->
</project>
通过设置 元素,可以指定 Maven 构建工具在执行 mvn package 等构建命令时生成特定类型的构建产物。不同的打包方式会影响最终生成的文件类型和结构。
<properties>
元素是 Maven POM 文件中用于定义项目属性的部分。在 <properties>
中,你可以定义一些变量,然后在 POM 文件的其他地方引用这些变量,以便在整个项目中统一管理一些配置信息。以下是一个简单的示例,展示了如何在 <properties>
中定义属性:
<project>
<!-- 其他项目配置 -->
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 其他属性的定义 -->
</properties>
<!-- 其他项目配置 -->
</project>
<dependencies>
元素: 定义项目的依赖关系。<dependency>
元素: 声明一个依赖,包含 <groupId>
、<artifactId>
、<version>
等元素。
<dependencyManagement>
元素是 Maven POM 文件中的一个重要部分,用于集中管理项目中所有模块的依赖版本信息。通过配置 <dependencyManagement>
包住的<dependencies>
,可以确保项目中的所有模块都使用相同版本的依赖,从而减少版本冲突的可能性。子项目可以通过继承父项目的 部分,自己的 pom 文件依赖版本号可以省略,从而使用父项目中定义的依赖版本。
<build>
元素: 定义项目的构建配置。<plugins>
元素: 插件配置,例如 Maven Compiler 插件、Maven Surefire 插件等。
<distributionManagement>
用于配置 Maven 构建输出的分发管理信息它主要用于指定 Maven 构建结果的发布位置,包括发布到 Maven 仓库、远程仓库、FTP 服务器等。
以下是 <distributionManagement>
的一个简单示例:
<project>
<!-- 其他项目配置 -->
<distributionManagement>
<repository>
<id>my-repo</id>
<url>https://example.com/maven-repo</url>
</repository>
<snapshotRepository>
<id>my-snapshot-repo</id>
<url>https://example.com/maven-snapshot-repo</url>
</snapshotRepository>
</distributionManagement>
<!-- 其他项目配置 -->
</project>
在上述示例中,<distributionManagement>
配置了两个部分:
<repository>
:用于发布正式版本(Release)。指定了 Maven 正式版本构建结果的发布位置,包括 id(标识符)和 url(发布的 URL)。正式版本和快照版本参考【maven】正式版本和快照版本详解
<snapshotRepository>
:用于发布快照版本(Snapshot)。类似于 <repository>
,但用于发布 Maven 快照版本。
这样配置后,当运行 mvn deploy
命令时,Maven 将会把构建结果发布到指定的仓库中。在实际项目中,根据实际需要,可以根据 <distributionManagement>
配置发布到不同的 Maven 仓库或其他存储位置。通常情况下我们的版本号带有后缀-SNAPSHOT
,发布的就是快照版本。在 pom.xml 文件中将项目的版本号修改为正式版本号,去掉 -SNAPSHOT
后缀, 接着遵循正式发布版本操作打标签等,再发布就是正式版本。
需要注意的是,<distributionManagement>
中的配置通常与 Maven 仓库管理工具(如 Nexus、Artifactory)等结合使用,以实现更灵活的构建发布管理。
例如 <repositories>
(定义项目使用的远程仓库)、<properties>
(定义属性)、<profiles>
(定义不同环境的配置)等。和setting.xml 相似,具体可参考【maven】setting.xml文件详解。