2011-08-26 81 views
4

我有一個GWT項目,它的源代碼在SVN中管理,使用Maven打包並通過Hudson管理其構建。我想讓最新簽入/構建的SVN修訂版號在應用程序根HTML文件底部的註釋中可見。我不在乎這發生在開發過程中的哪個地方!在編譯的GWT包中可訪問的SVN修訂版號

這裏是我GOOGLE了迄今的選項,沒有成功:

  • 我可以得到哈德森,建成後,編寫構建/修訂版本號 到其生成輸出文件中的一個(即應用程序根文件HTML )?我看不到這樣做。
  • 我可以讓Maven將SVN修訂版編號寫入其構建的 輸出文件之一(即應用程序根HTML文件)嗎?我已經看到Maven的 將這寫入JAR/WAR清單文件(然後可以在Java代碼中訪問 ),但我不確定這是否適用於GWT (我對此不太瞭解GWT的內部)。
  • 我可以獲得SubVersion作爲預提交鉤子將版本號寫入特定文件嗎?我知道將版本編號寫入正在編輯的文件很容易,但不太清楚寫入完全獨立的文件(以便在每次提交時更新它,無論該提交是否已更改)。

有沒有人有一個完整的,端到端的如何讓這些工作的例子?我一直在尋找代碼/配置的小片段來完成工作的一部分,但不包括任何我正在尋找的東西。

謝謝!

回答

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> 

確保哈德森是通過建設項目。顛覆結帳,這將設置SVN_REVISION環境變量對每個建設和Maven將填補它。

+0

FWIW,我在構建過程中將該環境變量(實際構建編號)作爲maven屬性傳遞(並且我直接過濾了我的HTML主頁),這樣我就可以將它修復爲我的一些默認值當我在我的機器上構建時,pom.xml;但它是相同的設置。 –

+0

完美,謝謝!我曾看過提到的過濾,但直到現在才真正理解它。 – user700774

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文件中確定我在過濾相應的HTML文件(如在傑森的解決方案所描述的),然後在「提取」的SVN_REVISION像所以:

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

簡單地說 - 我無法直接參考{} SVN_REVISION從HTML文件中的財產,所以我通過<properties>「包裝」它,讓maven參考它。