Maven构建编号插件,如何将构建编号保存在文件中?

22
我有一个使用Spring框架和Git的Java项目,我想显示一个构建号。我找到了Build Number Maven plugin。对于Git,构建号是一个Git哈希值,但我不喜欢这个表示方法,我认为日期更具表现力。
我找到了这篇优秀的博客文章,解释了如何在SVN和Git中使用构建号插件的不同配置文件。由于我只使用Git,所以我将插件部分复制到了我的build标签中,而没有创建一个新的配置文件。
当我运行“mvn package”命令时,它告诉我:
[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631

看起来不错,但我想知道,它存储在哪里?"git status"没有检测到任何新文件,似乎它也不在target/中(target/在我的.gitignore中)。

也许我需要更改配置以将构建号存储在文件中?如何使用构建号值?


感谢Michael-O的提示,我阅读了有关Maven入门指南中如何过滤资源文件的章节。我在src/main/resources/properties/application.properties中创建了一个文件application.properties,并填写了以下内容:

# application properties
application.name=${pom.name}
application.version=${pom.version}
application.build=${buildNumber}

我已经将以下XML片段添加到我的构建部分中:

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

当我在命令行中调用"mvn package"时,该属性文件会保存在target/classes/properties/application.properties中,例如以下内容:

# application properties
application.name=Sherd Control Panel
application.version=1.0.1-SNAPSHOT
application.build=2011-08-05_05-55_stivlo

命令行上一切正常,但是m2eclipse出现构建错误:

05/08/11 6.05.03 CEST: Build errors for obliquid-cp; 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project 
sherd: Cannot get the branch information from the scm repository : 
Exception while executing SCM command.

由于某种原因,m2eclipse尝试连接到我的仓库,但无法连接,因为它是通过SSH和私钥访问的Git仓库。我想知道是否可以告诉m2eclipse不连接到Git。


经过更多挖掘,我发现了revisionOnScmFailure选项,将其设置为true,现在m2eclipse也能正常工作了。供参考,这是我使用的buildnumber maven插件的完整配置(位于pom.xml中的build/plugins部分)。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <goals>
                <goal>create</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <doCheck>false</doCheck>
        <doUpdate>false</doUpdate>
         <revisionOnScmFailure>true</revisionOnScmFailure>
        <format>{0,date,yyyy-MM-dd_HH-mm}_{1}</format>
        <items>
            <item>timestamp</item>
            <item>${user.name}</item>
        </items>
    </configuration>
</plugin>
4个回答

10

不应将revisionOnScmFailure选项设置为true,它并不期望布尔值。将其设置为您想要在无法使用源代码管理时使用的版本字符串,例如na或类似的字符串。对于您的情况来说,这并不重要,因为您覆盖了构建号格式,但这样做会更正确。

请参见buildnumber-maven-plugin文档


谢谢,我在Mac OS X 10.10上通过Netbeans构建时无法让插件正常工作,但是通过命令行可以正常构建。设置这个属性让我能够继续通过IDE工作,显然Jenkins服务器也可以正常工作。 - Hiro2k

4

3

我无法复现原帖中提到的问题。在我的情况下,命令行和m2eclipse都能正常工作,并且文件正确生成在target/classes 文件夹中。 @KasunBG 提供的答案是错误的。只有当您使用以下内容时,才会生成 buildNumber.properties:

        <format>{0,number}</format>
        <items>
            <item>buildNumber</item>
        </items>

buildNumber.properties用于存储可递增的数字。因此(我认为),如果您使用时间戳/ scmVersion等,插件不会生成此文件。


0

文档页面指出,属性文件存储在${basedir}/buildNumber.properties中,在运行buildnumber:create阶段创建。


然而,至少在我的配置中它并没有创建那个文件。我通过过滤属性文件取得了部分成功,但是我在更新的问题中遇到了另一个问题。 - stivlo
你尝试手动创建文件并首先添加起始的buildNumber了吗?这样做,然后进行你的操作,检查数字是否递增。确保你满足了它所要求的要求。 - Kasun Gajasinghe
谢谢您的建议。我尝试创建一个空的buildNumber.properties文件,并执行buildnumber:create,但什么也没有发生,然后我尝试在里面放入1,执行buildnumber:create,但仍然没有任何反应。与此同时,我刚刚通过使用过滤属性找到了上一个问题的解决方案。我将更新我的问题并提供完整的解决方案。 - stivlo
1
当您使用过滤属性时,您的属性文件包含字符串foo=$ {buildNumber},并仅更改构建工件的变量。如果我处于开发模式并希望从属性文件中获取生成号码而不是${buildNumber}字符串,该怎么办? - Fagner Brack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接