SVN修订版号可在编译的GWT包中访问

时间:2011-08-26 04:28:17

标签: java svn gwt maven hudson

我有一个GWT项目,其源代码在SVN中管理,使用Maven打包,并通过Hudson管理其构建。我想在应用程序根HTML文件底部的注释中看到最新签入/构建的SVN修订版号。我不关心在开发过程中发生这种情况!

到目前为止,我用Google搜索了以下选项,但没有成功:

  • 在构建之后,我可以让Hudson写入构建/修订号 到其构建输出文件之一(即应用程序根HTML) 文件)?我见过没办法做到这一点。
  • 我可以让Maven将SVN修订版编号写入其中一个版本 输出文件(即应用程序根HTML文件)?我已经看到了方法 Maven将此文件写入JAR / WAR清单文件(然后可以 在Java代码中访问),但我不确定它是否适用于GWT (我对GWT的内部结构并不是特别了解。)
  • 我可以将SubVersion作为预提交挂钩,将版本号写入特定文件吗?我知道将版本号写入您正在编辑的文件很容易,但不能确定写入一个完全独立的文件(以便在每次提交时更新它,无论它是否在该提交中被更改)。

有没有人有一个完整的,端到端的例子来说明如何使这些工作?我一直在寻找代码/配置的小片段来完成工作的一部分,但不是我正在寻找的任何东西。

谢谢!

2 个答案:

答案 0 :(得分:4)

通过Maven和Hudson的组合,您可以实现您的目标。在本例中,我们假设您希望Web应用程序根目录中的文件version.txt包含修订版。

version.txt

${SVN_REVISION}

在项目中pom.xml启用过滤maven-war-plugin

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <webResources>
      <webResource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
        <includes>
          <include>version.txt</include>
        </includes>
      </webResource>
    </webResources>
  </configuration>
</plugin>

确保Hudson正在构建您的项目。 Subversion结帐,它将为每个构建设置SVN_REVISION环境变量,Maven将填充它。

答案 1 :(得分:0)

此解决方案适用于那些持续获取{SVN_REVISION}而不是目标文件中的实际SVN_REVISION值的人。

我的解决方案也是使用过滤。但是,因为我希望SVN_REVISION出现在我的gwt应用程序的主html页面内(作为“打击”用户缓存的一种方式,确保如果我们执行新的构建,然后用户下载最新的html文件),我不知道能够使用Jason Terk的解决方案。 html文件只打印{SVN_REVISION}而不是实际的SVN_REVISION值。

所以我在<properties>中定义了一个属性:

<properties>
    ...
    <buildVersion>${SVN_REVISION}</buildVersion>
    ...
</properties>

然后我确定我正在过滤相应的html文件(如Jason的解决方案中所述),然后在html文件中“提取”SVN_REVISION,如下所示:

<script type="text/javascript">
    ...
    var versionIdSuffix = '?v=${buildVersion}';
    ....
</script>

简而言之 - 我无法直接从html文件中引用{SVN_REVISION}属性,因此我将其“包裹”通过<properties>,让maven引用它代替。