Svn 如何使用maven获取当前subversion版本号和URL

Svn 如何使用maven获取当前subversion版本号和URL,svn,maven-2,versioning,Svn,Maven 2,Versioning,我从subversion存储库中签出一些分支或标记,然后用maven构建项目 现在,我想获取存储当前版本号和某个文件的URL。我该怎么做?也就是说,我想得到我签出的任何分支/标记的修订号和URL 我知道,但我认为它不能做到这一点。它获取pom.xml中指定的分支版本号。buildnumber maven插件只在您的构建中注入当前版本,所以您是对的。为了获得URL,我认为您应该编写一个使用 您可以使用来执行 […] maven antrun插件 包裹 跑 […] 注意:我使用了sh-c来运行s

我从subversion存储库中签出一些分支或标记,然后用maven构建项目

现在,我想获取存储当前版本号和某个文件的URL。我该怎么做?也就是说,我想得到我签出的任何分支/标记的修订号和URL


我知道,但我认为它不能做到这一点。它获取pom.xml中指定的分支版本号。

buildnumber maven插件只在您的构建中注入当前版本,所以您是对的。为了获得URL,我认为您应该编写一个使用

您可以使用来执行


[…]
maven antrun插件
包裹
跑
[…]
注意:我使用了
sh-c
来运行svversion,因此我可以将输出重定向到一个文件。我认为您无法将输出放入属性中供maven构建使用

您可以使用相同的方法运行
svn info--url

,正如前面所说的,可以使用来查找修订版


至于URL:Maven的做法是使用-tag将其放在URL中。如果您只需正确配置一次,然后使用适当的Maven插件(,)进行分支、标记、发布等操作。您可以确保-tag始终包含正确的url。

您已经说过这不能满足您的需要,但对于其他有类似问题的人,值得注意的是,您可以使用调用任意SCM命令,以针对POM的
SCM
部分中配置的存储库。例如,在中,我演示了如何在Maven mojo中提交单个文件


您可以稍微修改该示例,将
SCMProvider
向下转换为
SvnExeScmProvider
,并调用其
info()
方法。这将返回一个
SvnInfoScmResult
,它封装了一个
SvnInfoItem
。该项封装了通过标准Subversion API运行
svn info
命令的结果。

在我看来,API只支持执行“svn”命令及其各种参数和开关。问题在于,在subversion中,使用不同的可执行命令来检索适当的详细版本号,即“svnversion”。使用此命令,我可以判断是否有混合版本、修改版本等。例如:

[jim@localhost sb_rc1 993]$ svn info | grep Revision
Revision: 51159
[jim@localhost sb_rc1 994]$ svnversion
51159M
[jim@localhost sb_rc1 994]$

你猜怎么着?”“svn信息”在这里对我撒谎。我的本地副本是从原来的51159修改而来的,这就是为什么“Sversion”报告的版本号附带了一个M。如果我正在试验一个包含混合版本的分支,该怎么办?”Sversion“可以处理此问题。”“svn信息”无法删除。更糟糕的是,如上所示,如果我根据错误信息发布了一个版本,那么它将提供误导性和潜在的灾难性信息。

为完整起见,antrun支持从1.7版开始将ant属性导出到mvn。请参见

这是一个老问题,但是
buildnumber maven插件
现在公开了一个
${scmBranch}
值,其中包含SCM URL。我试了一下,似乎很管用。要在资源筛选中使用它,您必须首先将其放入属性中,就像Maven公开的
timestamp
值一样


有关更多信息,请参阅。

插件配置中未指定“ProviderImplements”时,Buildernumber maven插件依赖于您安装的svn客户端。当系统路径中未定义svn执行路径,或者您的svn客户端版本不匹配时,插件无法正确调用svn命令行

因此,添加javasvn客户机及其依赖项是一个好主意

      <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>buildnumber-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>create</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <doCheck>false</doCheck>
                <doUpdate>false</doUpdate>
                <providerImplementations>
                  <svn>javasvn</svn>
                </providerImplementations>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
                    <artifactId>maven-scm-provider-svnjava</artifactId>
                    <version>2.0</version>
                </dependency>
                <dependency>
                    <groupId>org.tmatesoft.svnkit</groupId>
                    <artifactId>svnkit</artifactId>
                    <version>1.7.8</version>
                </dependency>
            </dependencies>
        </plugin>

org.codehaus.mojo
buildnumber maven插件
1.2
验证
创造
假的
假的
javasvn
com.google.code.maven-scm-provider-svnjava
maven scm提供程序svnjava
2
org.tmatesoft.svnkit
斯文基特
1.7.8

由用户2990242公开的解决方案非常适合单独使用(感谢您的解释)。 之后,您只需使用maven jar插件(或maven war)在manifest.mf中添加信息。 这里有一个完整的例子:

        <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>
                <timestampFormat>{0,date,dd-MM-yyyy HH:mm:ss}</timestampFormat>
                <doCheck>false</doCheck>
                <doUpdate>false</doUpdate>
                <providerImplementations>
                    <svn>javasvn</svn>
                </providerImplementations>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
                    <artifactId>maven-scm-provider-svnjava</artifactId>
                    <version>2.1.1</version>
                </dependency>
                <dependency>
                    <groupId>org.tmatesoft.svnkit</groupId>
                    <artifactId>svnkit</artifactId>
                    <version>1.8.5</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                    <manifestEntries>
                        <Implementation-Build>${buildNumber}</Implementation-Build>
                        <Implementation-Title>${project.name}</Implementation-Title>
                        <Implementation-Vendor>ENTERPRISE</Implementation-Vendor>
                        <Implementation-Version>${project.version}</Implementation-Version>
                        <Built-By>${user.name}</Built-By>
                        <Built-OS>${os.name}</Built-OS>
                        <Build-Date>${timestamp}</Build-Date>
                        <SCM-Revision>${buildNumber}</SCM-Revision>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>

org.codehaus.mojo
buildnumber maven插件
1.3
验证
创造
{0,日期,dd-MM-yyy-HH:MM:ss}
假的
假的
javasvn
com.google.code.maven-scm-provider-svnjava
maven scm提供程序svnjava
2.1.1
org.tmatesoft.svnkit
斯文基特
1.8.5
org.apache.maven.plugins
maven jar插件
2.5
真的
${buildNumber}
${project.name}
企业
        <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>
                <timestampFormat>{0,date,dd-MM-yyyy HH:mm:ss}</timestampFormat>
                <doCheck>false</doCheck>
                <doUpdate>false</doUpdate>
                <providerImplementations>
                    <svn>javasvn</svn>
                </providerImplementations>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
                    <artifactId>maven-scm-provider-svnjava</artifactId>
                    <version>2.1.1</version>
                </dependency>
                <dependency>
                    <groupId>org.tmatesoft.svnkit</groupId>
                    <artifactId>svnkit</artifactId>
                    <version>1.8.5</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                    <manifestEntries>
                        <Implementation-Build>${buildNumber}</Implementation-Build>
                        <Implementation-Title>${project.name}</Implementation-Title>
                        <Implementation-Vendor>ENTERPRISE</Implementation-Vendor>
                        <Implementation-Version>${project.version}</Implementation-Version>
                        <Built-By>${user.name}</Built-By>
                        <Built-OS>${os.name}</Built-OS>
                        <Build-Date>${timestamp}</Build-Date>
                        <SCM-Revision>${buildNumber}</SCM-Revision>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>