其實這個問題困擾了我很久了,但一直沒有好好去尋找解決方案,所以也一直拖着,如今稍微抽點時間研究了一下,發覺也不是很難解決。
問題具體描述如下: 假如我有一個A項目,使用了CommLib庫,另外我又有一個與A項目不相關的B項目,B項目也要使用CommLib庫,那么CommLib庫的代碼怎么管理呢?
方法1:把CommLib庫獨立出來,編譯生成DLL,A項目包含CommLib的DLL,B項目也包含CommLib的DLL。這樣一來,要A項目和B項目都不能直接修改CommLib的代碼了。但問題是:如果CommLib的代碼更新了,那還得手工拷貝給A項目一份,B項目一份,這樣多容易遺漏或出錯。
方法2:把A項目和B項目放到同一個大的目錄下,也就是整合為一個大的工程,CommLib也整合進去,這樣就可以只維護一份代碼,又不會有更新的問題了。但是:把本來不相關的項目堆在一起,就十分不合理,試想開發人員想對B項目進行修改,可他卻不得不同時檢出A項目的代碼,這多么容易誤操作,另外這樣對分工合作很不利。
那么有什么好的方法,可以做到只維護一份代碼,又不帶來管理上的麻煩? 這就需要利用到SVN的強大的“Externals”功能了,Externals就相當於外部引用,例如在A容器中引用CommLib容器中的代碼,B容器中也引用CommLib中的代碼,CommLib出現在多個地方,但實際上它只有一份,任何地方對CommLib的修改都會影響到其它地方。這種方案也不算很完美,但對我們而言,已經足夠好了!怎么做?下面以一個實際項目為例,詳細介紹:
我有一個項目,名為UUAS_WS,其SVN路徑為:
http://10.186.3.21:8080/svn/UUAS_WS/trunk
其項目目錄結構為:
它需要引用Comm公共庫,希望把公共庫的代碼放在其項目根目錄下。
公共庫的SVN路徑為:
http://10.186.3.21:8080/svn/OA_Comm/trunk
將Comm加入UUAS_WS項目后,項目目錄結構應為:
設置方法還是相當簡單的:
1, 打開容器瀏覽器
2, 打開UUAS_WS容器的屬性
3, New一個Externals
4, 填入Comm的SVN路徑和本地名稱
5, OK,OK,再寫入一些修改批注
6, OK,就完成了!這時候再對UUAS_WS執行一下Update,就能看到結果了。