Maven 输出版本号到文本文件

1、概览

在基于 Maven 的 Java 项目中,经常需要将项目版本号输出到文本文件中。用于版本跟踪、日志记录以及确保不同构建和部署之间的一致性。

Maven 会在 pom.xml 文件中的 <version> 标签下维护项目版本。利用 Maven 的资源过滤(Resource Filtering)功能和附加插件,我们可以在构建过程中自动提取并存储该版本号。

本文将带你了解 Mave 实现版本号输出的两种方法:第一种是使用 Maven Resources Plugin,第二种是使用 Maven Antrun Plugin

2、使用 Maven Resources Plugin

Maven 资源插件通常用于文件过滤,允许用 pom.xml 中定义的值替换资源文件中的占位符。

该插件可以在构建过程中直接在资源文件中动态插入项目属性(versionartifactIdgroupId)。

2.1、启用资源过滤

首先配置 pom.xml 文件中的 <resources> 部分,以启用项目中资源文件的过滤功能。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 启用资源过滤 -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<filtering>true</filtering> 此配置会告诉 Maven 处理 src/main/resources 目录中的所有文件,并应用过滤功能,用 Maven 项目属性(如 ${project.version})中的相应值替换任何占位符。

2.2、创建版本文件

接下来,在 src/main/resources 目录中创建一个资源文件(例如 version.txt)。该文件可包含 ${project.version} 等占位符,它们将在构建过程中被动态替换为 pom.xml 中定义的实际版本号。

如下,创建一个 version.txt 文件,内容如下:

Version: ${project.version}

2.3、构建项目

配置完成后,就可以运行 Maven 命令来构建项目了:

$ mvn clean package

项目构建完成后,可以在 target/classes/ 目录中找到过滤后的 version.txt 文件。${project.version} 占位符会被替换为 pom.xml 中指定的版本号:

$ cat target/classes/version.txt
Version: 1.0-SNAPSHOT

此外,还可以在 <build> 部分的 <outputDirectory> 标签中指定不同的目录,从而自定义 Maven 配置中的文件位置。这种方法简化了在构建过程中将版本信息和其他项目属性过滤到资源中的过程。

3、使用 Maven Antrun Plugin

在 Maven 构建过程中生成版本文件的另一种方法是使用 Maven Antrun 插件。该插件通过动态创建或修改文件,无需配置资源文件或手动执行额外过滤,提供了灵活性。

3.1、插件配置

配置该插件到 pom.xml 文件中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>generate-version-file</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <echo file="${project.build.directory}/output/version.txt">
                        Version: ${project.version}
                    </echo>;
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

关键配置如下:

  • <phase>generate-resources</phase>:指定插件在 Maven 构建生命周期的生成资源阶段运行。
  • <goal>run</goal>: 此目标运行配置中定义的 Ant 任务。在这种情况下,它会将版本写入文件。
  • <echo file="${project.build.directory}/output/version.txt">:这将把项目的版本写入 target/output 目录下的 version.txt 文件。${project.build.directory} 是 Maven 属性,默认解析为 target

3.2、构建项目

添加插件配置后,就可以使用 Maven 命令构建项目了:

$ mvn package

构建完成后,会在 target/output/ 目录中创建一个 version.txt 文件。该文件包含了项目的版本号:

$ cat target/output/version.txt
Version: 1.0-SNAPSHOT

这种方法可自动生成版本文件,无需手动过滤资源文件。此外,还可以通过调整插件配置中的 <echo file="..."> 路径,轻松定制文件的位置。

4、总结

Maven Resources PluginMaven Antrun Plugin 都是管理项目版本信息并将其输出到文本文件的优秀工具。通过使用这些插件,我们可以轻松管理 Java 项目的版本号并将其输出到文件中,从而确保在构建过程中版本始终准确且最新。


Ref:https://www.baeldung.com/maven-output-version-number-text-file