1. 概述

在基于Maven的Java项目中,将项目版本号输出到文本文件是常见需求。这有助于版本追踪、日志记录,并确保不同构建和部署环境的一致性。

Maven将项目版本保存在pom.xml<version>标签中。通过利用Maven的资源过滤功能和额外插件,我们可以在构建过程中自动提取并存储该版本信息。

本文介绍两种实现方式:第一种使用Maven Resources Plugin,第二种使用Maven Antrun Plugin

2. 使用Maven Resources Plugin

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

在版本号输出场景中,该插件能在构建过程中将动态项目属性(如versionartifactIdgroupId)直接插入资源文件。

2.1. 启用资源过滤

要使用Maven Resources Plugin进行过滤,需先配置pom.xml中的<resources>部分。该配置告诉Maven对项目资源文件启用过滤。

更新pom.xml以启用资源过滤:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

此配置指示Maven处理src/main/resources目录下的所有文件,并应用过滤机制,将占位符替换为Maven项目属性对应的值(如${project.version})。

<filtering>true</filtering>是启用此功能的关键配置。

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>标签中指定不同目录,自定义文件输出位置。此方法简化了构建过程中版本信息和其他项目属性的过滤操作。

3. 使用Maven Antrun Plugin

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

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构建生命周期的generate-resources阶段运行
  • <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 Plugin和Maven Antrun Plugin都是管理项目版本信息并输出到文本文件的优秀工具:

  • Maven Resources Plugin:简单直接,适合需要手动将版本信息过滤到资源文件的场景
  • Maven Antrun Plugin:提供更自动化的方式,适合动态生成版本文件的需求

通过这些插件,我们可以轻松地将Java项目的版本号输出到文件,确保构建过程中版本信息的准确性和时效性。