Svn 如何使用maven获取当前subversion版本号和URL
我从subversion存储库中签出一些分支或标记,然后用maven构建项目 现在,我想获取存储当前版本号和某个文件的URL。我该怎么做?也就是说,我想得到我签出的任何分支/标记的修订号和URLSvn 如何使用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
我知道,但我认为它不能做到这一点。它获取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>