我有一个GWT项目,其源代码在SVN中管理,使用Maven打包,并通过Hudson管理其构建。我想在应用程序根HTML文件底部的注释中看到最新签入/构建的SVN修订版号。我不关心在开发过程中发生这种情况!
到目前为止,我用Google搜索了以下选项,但没有成功:
有没有人有一个完整的,端到端的例子来说明如何使这些工作?我一直在寻找代码/配置的小片段来完成工作的一部分,但不是我正在寻找的任何东西。
谢谢!
答案 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引用它代替。