2008-10-21 26 views
2

所以我有一個很好的Java項目,使用Ant構建到/ dist文件夾。
整個項目都在版本控制之下,所以我可以通過'svn export'部署最新版本到dist文件夾的路徑。
但我的構建不斷刪除dist文件夾內的.svn文件夾及其所有依賴項,因爲它在構建時清除文件夾而不是覆蓋。精確的罪魁禍首是JarBundler,它是構建我的mac.app包的Ant任務 - 它在重新創建之前會刪除整個包的文件夾。
這顯然辜負了我的svn,因爲所有.svn文件夾現在缺少該文件夾,所以它說它有衝突。當您的螞蟻在您的版本控制中構建過程時,該怎麼做¶

任何人有任何想法,我怎麼能解決這個問題?我無法弄清楚如何阻止jarbundler刪除所有內容,所以我不得不做一些我更害怕的事情。我對Ant也很新穎,僅供參考。

回答

3

要有DIST源代碼控制,如果你希望你的源代碼控制系統是一個獨特的參考所有可以被認爲是很好的做法:

  • 開發商
  • 彙編(單位 - 測試)
  • 認證測試人員(您在集成平臺上查詢一系列dist,並在其中執行非迴歸測試,perfs測試,壓力測試等)
  • 產品發佈經理 ...

,但你需要有一個適當的釋放過程中,通過拉這一點。

在你的情況下,構建必須在獨立的和私人的目錄,那就是在顛覆一個目錄不。當構建是好的,你進口它變成顛覆,如果它是一個正式釋放,或者將它導入到共享目錄下,如果它是一個臨時的建設,只需要通過下一隊(從而避免犯成百上千的SCM構建,使用空間來完成任務)。

注:在您的SCM具有交付(DIST)的主要優點是允許依賴項目與你的源代碼不工作,而是直接與你的交貨(這是必然要在一個點或另一個投入生產):如果他們設法使他們的代碼工作,通過編譯你的交付,當他們部署你的工作時,他們有機會成爲他們自己的分工。
這樣,其他團隊在訪問他們的任何資源時訪問您的交付(您的'myProject.jar'):他們可以通過SCM讀取您的jar版本,日期,歷史記錄,元數據,標籤, 等等。

然而,對於一個小型整體式(如'沒有其他項目依賴於它')項目,可以認爲dist(最終包裝遞送)可以根據需求重新構建並存儲在外部參考系統,作爲一個外部Maven倉庫的例子。
但是:Maven沒有SCM倉庫,這意味着您需要爲jar簽名('MyProject-1.0.jar'),您沒有歷史記錄,並且您需要將所有元數據報告在單獨的文本文件中。在該Maven倉庫中訪問該交付的任何其他項目都需要根據您的版本命名約定來調整其腳本和類路徑。
另外,Maven是您開發架構中的另一個存儲庫。無論何時您可以將回購次數降至最低('1';)),它都會更好。

0

簡單。不要登入/ dist進入版本控制。

版本控制真的不應該有任何生成的代碼/二進制文件/罐子/你有什麼。

0

大概我在這裏錯過了一些東西,但爲什麼你有你的內置產品檢入你的源碼控件系統?一般來說,這不被認爲是好的做法。

如果您確實想要檢入構建產品,請將它們複製到其他位置(也稱爲「預構建」目錄),然後從中檢查它們。

編輯添加:你不應該這樣做的原因是,鑑於目前的來源,你應該能夠用一個單一的構建命令重新創建分配。

0

好的,謝謝大家。 我現在得到的是,爲什麼從哲學上說,保持SCM的構建不失爲一個好主意,並且將爲未來記住這一點。 然而,實際上,在這種情況下,我是這個短期(4周)項目中唯一的開發人員。我使用svn至很容易通過低速連接更新公共Web服務器上的發佈版本,以便差異更新至關重要。 因爲沒有人提出了更新遠程部署版本的簡單替代方案,所以我提出了這個hacky hack來避免我的問題:

說我版本化的生成文件夾是/ dist。那麼,我告訴我的構建腳本構建到/ dist-tmp,然後將/ dist-tmp中的所有文件遞歸複製到/ dist頂部,最後刪除/ dist-tmp。

這是我的Ant構建腳本中的一些額外的行,並且效果很好。

雖然下一次,生病確保部署主機不是窗口,然後一個簡單的rsync腳本將做的伎倆,然後我可以離開SCM的構建。

@VonC得到了哲學最好解釋的答案。

0

我同意把構建的產品放入SVN並不是很好的做法。這就是說,如果你有一些要求做到這一點,你無法避開,你可以使用一個更現代的版本控制系統,如Git,Bazaar和Darcs(還有其他的,但我已經使用過這些三)。

所有這三個只把版本控制元數據放在根目錄,所以沒有子文件夾中的元數據,所以我會認爲你不會有這個問題...