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

时间:2011-08-04 20:00:41

标签: maven build maven-plugin buildnumber-maven-plugin

我有一个使用Spring Framework和Git的Java项目,我想显示一个内部版本号。我找到了Build Number Maven plugin。使用Git,内部版本号是一个Git哈希。我不喜欢这个,我认为约会更具表现力。

我发现这个excellent blog article解释了如何为SVN和Git使用不同配置文件的内部版本号插件。由于我只是使用Git,而不是创建新的配置文件,我只是在我的构建标记中复制了插件部分。

当我运行“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”没有检测到任何新文件,它似乎不在目标/中(目标/在我的.gitignore中)。

也许我要更改配置以将内部版本号存储在文件中?如何使用内部版本号值?


感谢Michael-O的暗示,我阅读了关于how to filter resource files in Maven Getting Started Guide的章节。我在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插件的完整配置(它位于build / plugins部分的pom.xml中)。

<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 个答案:

答案 0 :(得分:10)

您不应将revisionOnScmFailure选项设置为true,它不会指望布尔值。将其设置为SCM不可用时要使用的修订字符串,如na或类似。对于您的情况并不重要,因为您覆盖了内部版本号格式,但它会更正确。

请参阅buildnumber-maven-plugin docs

答案 1 :(得分:4)

将其存储在已过滤的属性文件中。见Using maven to output the version number to a text file

答案 2 :(得分:2)

我无法重现OP报告的问题。在我的例子中,命令行和m2eclipse工作正常,文件在 target / classes 文件夹中正确生成。 @KasunBG提供的答案不正确。仅当您使用以下内容时才会生成buildNumber.properties:

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

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

答案 3 :(得分:0)

documentation页面说明属性文件存储在${basedir}/buildNumber.properties,这是在buildnumber:create阶段运行时创建的。