首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用buildnumber-maven-plugin检索svn最近更改的修订号

使用buildnumber-maven-plugin检索svn最近更改的修订号
EN

Stack Overflow用户
提问于 2016-11-05 20:37:57
回答 5查看 1.9K关注 0票数 5

我目前正在为我的应用程序开发一个基于微服务的架构。我有一个包含许多服务的maven多模块项目,因此我可以使用maven deploy命令和maven docker plugin轻松地将它们部署到docker hub。

尽管如此,docker图像标记是基于项目版本号的,而我希望使用每个存储库最后更改的修订号来标记它们。现在,我只是尝试使用buildnumber-maven-plugin将此字段添加为清单条目

假设这是我的多模块项目:

代码语言:javascript
复制
<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>
...

    <modules>
        <module>module-a</module>
        <module>module-b</module>
    </modules>

...

</project>

模块a的模型是:

代码语言:javascript
复制
<?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">
    ...


    <scm>
        <connection>scm:svn:http://myrepo.com/svn/application/module-a</connection>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>true</doUpdate>
                    <useLastCommittedRevision>true</useLastCommittedRevision>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <SCM-Revision>${buildNumber}</SCM-Revision>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            ....
        </plugins>
    </build>

    <dependencies>
        ...
    </dependencies>

</project>

问题是,{buildNumber}的计算结果是我的工作副本号,它引用的是对存储库的最后一次提交,而不是scm:svn:http://myrepo.com/svn/application/module-a位置。为了更好地解释它,当我显示tortoise的module-a的属性时,我得到了这样的结果:

我想要的是检索3248,它指的是对module-a所做的最后一次实际更改,而不是3257 (工作副本),这是我从插件中获得的。这样,docker插件就会知道它是否是一个不同的图像标签,并且只有在对repo中的模块进行更改时才会推送它。

EN

回答 5

Stack Overflow用户

发布于 2018-01-09 20:48:33

代码语言:javascript
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>create</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <doCheck>false</doCheck>
        <doUpdate>true</doUpdate>
        <useLastCommittedRevision>true</useLastCommittedRevision>
    </configuration>
</plugin>

这对我很有效。

票数 3
EN

Stack Overflow用户

发布于 2018-03-21 19:35:12

我也不能让buildnumber-maven-plugin在同样的场景下工作。<useLastCommittedRevision>在v1.4中不起作用,在v1.3中,它不会返回最后更改的版本,但在某些情况下会返回倒数第二个版本。

有一个巧妙的解决方法可以从svn info命令输出中获取最后更改的修订号。根据您的SVN版本,有两个选项:

对于SVN v1.9或更新版本的

  • ,请使用maven-antrun-plugin运行svn info --show-item=last-changed-revision并将输出保存到属性中。

org.apache.maven.plugins maven-antrun-plugin 1.8验证运行真org.apache.maven.plugins maven-jar-plugin ${svn.info}

SVN版本早于v1.9 (在我的示例中是v1.8.13)您可以使用maven-antrun-pluginE216<运行svn info --xml并将输出保存到属性中的/code>,和build-helper-maven-plugin,使用正则表达式解析该属性的内容,匹配最后更改的修订号并将其保存到第二个属性中。

我之所以选择添加--xml参数,是因为基本的svn info输出会根据安装的语言进行转换,但是xml输出格式始终是相同的。

org.apache.maven.plugins maven-antrun-plugin 1.8验证运行真org.codehaus.mojo build-helper-maven-plugin3.0.0 regex-svn-last-rev regex-property svn.last。版本${svn.info} ^\s\S*?commit\s\S*?revision=\“(\d+?)\s\S*?$ $1 false org.apache.maven.plugins maven-jar-plugin${svn.last.rev}

票数 2
EN

Stack Overflow用户

发布于 2017-08-03 03:19:00

我想你唯一错过的就是

代码语言:javascript
复制
<doCheck>false</doCheck>

我认为应该是true

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40438351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档