在工作中,我們正在開發一個具有不少前端,後端和支持組件的大規模應用程序。通常前端是用C#開發的,而後端是用Java開發的,儘管後端的一部分也是用C#開發的,也可能是後來的C++。什麼是源代碼管理中多語言項目的合理結構?
語言和平臺的選擇不是任意的;我們試圖衡量每個開發時間的相對優點,工具鏈成本,特定開發團隊對語言的熟悉程度等等。但是,所有這些組件的共同之處在於它們都是完整操作所需的產品,並且他們正在由獨立(但高度溝通)的團隊同時開發。
此前,我們使用Team Foundation Server來處理我們的.NET代碼和Subversion來處理我們的Java代碼;由於團隊責任明確分開,除了將源代碼樹中生成的二進制文件(在這種情況下爲WAR)帶來的不便之外,這導致了很少的問題,以及保持分支和修訂同步的高昂手動開銷。通過這個項目,團隊之間的分離程度有意地小得多,並且分支/合併的數量預計會更高;因此我們正在轉向統一的VCS,更具體地說是Subversion。
這讓我想到了這個問題的肉:如何有效地混合Java和C#代碼?實際上,我們將使.NET代碼依賴於Java代碼庫; Java二進制文件需要運行除單元測試代碼以外的其他任何東西(集成測試已經要求二進制文件,QA,驗收測試等等)。我們目前的想法如下:
/trunk /java /component1 /component2 /library1 /library2 /net /assembly1 /assembly2 /... project.sln
這個想法是整個源碼樹放在一個分支下; .NET代碼依賴於Java代碼,因此我們將爲該解決方案添加一個後構建步驟,該解決方案很可能會爲Java組件調用ant腳本。這允許分支整個代碼庫(對於.NET開發人員)或僅對Java組件(對於Java開發人員)進行分支。
這種解決方案的問題是:
- 當兩個代碼庫中的一個變成如此之大,使得它的副本爲每個分支得到不切實際的,會發生什麼? (我們的想法:將.NET和Java代碼拆分爲獨立的存儲庫,並使用svn:externals,對此的任何輸入將會被大大地提升讚賞)。
- 我們使用Eclipse進行Java開發。我們如何管理「共享」工作空間(即哪些項目需要哪些組件,依賴關係圖等)?到目前爲止,我們已經擁有相對較少的Java組件,所以每個開發人員都可以同時將它們全部保留在工作區中。隨着Java組件和Java開發人員的增加,我看不到我們如何繼續這樣做;關於如何保持工作空間版本化(la解決方案文件)的任何建議,同時仍保持兩個代碼庫之間的同步?
我很想聽聽您的意見!
我們最終去與上述解決方案。分支機構的創建/結賬時間確實很長,但並不可怕(因爲我們轉向了更薄的分支模型)。由於我們還沒有找到一個體面的替代品,這就是我爲類似團隊推薦的結構。 – 2010-02-22 15:05:49