我打算用現有的代碼庫在Java中創建一個軟件的3個版本。最佳做法是什麼?我應該爲每個版本創建3個不同的項目嗎?還有用於管理版本的任何工具?管理軟件版本
管理軟件版本
回答
我首先想到的是保持一個單一的代碼庫,如果可能的話,用某種標誌的切換。
如果不可能,我會盡量保持儘可能相同,並具有較大的項目中使用更小的項目作爲子項目,如果可能的話自動啓用某些功能 - 例如,每個項目可以有它自己的主要,不同的版本可能只是調用不同的主要設置標誌來啓用功能。
如果你的標誌是最終的,應該連拉避免不必要的代碼到您的項目在所有。
最後,最壞的情況下,在顛覆3個分支。
編輯:
你讓我覺得多一點關於這個,我想我找到了一個更好的解決方案。
我想我這個分成四個項目,結合所有的「共同」的東西變成一個基地項目,這是不同的東西,我會攤開其他三個項目 - 讓我們說你有基地,示範,支付和業務項目..
其中三個可能有所不同,你將有一個對象從演示/薪酬/業務類中的一個提供的功能。例如,如果付費版本具有新的菜單項,則可能在您的某個對象中包含getMenuItems。它會返回一個菜單樹,你可以放在你的菜單欄中。演示版本將有更少的項目。
通過這種方式,您的「Base」永遠不會知道它運行的是哪個版本,它只是使用對象。
爲了獲得對象,我會有一個工廠。工廠會是這個樣子:
private String[] availablePackages={"business", "pay", "demo"};
public getMenuClass() {
Class c;
for(String package : availablePackages) {
try {
c=Class.forName("com.meh.myapp."+package+".MenuClass");
} catch... {
// No package by that name
}
if(c != null) {
return c.newInstance();
}
}
// Something went wrong, no instance found.
的上升氣流是,你應該首先嚐試實例com.meh.myapp.business.MenuClass,然後再嘗試......終於pay.MenuClass ... demo.MenuClass 。
這應該允許您通過簡單地運送不同的罐子來改變您的配置 - 如果您決定只運送演示和主罐子,您將獲得一個演示應用程序。通過運送付款jar,您將獲得付費應用程序。
請注意,很可能您希望企業將其大部分工作委託給「支付」,並且「支付」委託其中一部分工作以「演示」,但演示不知道任何業務或支付,而「主」只能反映其他三個。
這將是一個很好的解決方案,因爲沒有配置要求 - 事實上,你只需要運送支付jar從演示升級到支付,主要和演示罐被重用並保持正確的位置是。
你有沒有任何指向java編譯最終標誌的鏈接?一個快速搜索沒有給我很多信息。它如何丟棄未使用的代碼? – user121196 2010-03-23 00:38:55
我的意思是不是一個編譯標誌,我的意思是如果你有一個最終的變量,比如「private final boolean INCLUDE_CODE = false」,那麼它的任何保護,例如:「if(INCLUDE_CODE)myVar = new SpecialClass() ;」應該永遠不會編譯進代碼。它應該認識到,它永遠不會是真實的,並優化它。如果這是SpecialClass被引用的唯一地方,那麼SpecialClass不應該被拉進你的項目 - 但我可能已經想出了一個更好的解決方案,重新閱讀我的答案。 – 2010-03-23 01:25:51
理想的方法是將你的應用分爲「核心」,「額外的東西」,「更多的東西」,並結合這些依賴關係。不過,這可能會有很多工作,具體取決於您擁有的代碼庫。
如果您使用SVN進行源代碼管理,您可以從現有代碼庫中爲每個版本創建3個分支。通常人們試圖避免這種情況,例如,如果您需要修復這些分支中的常見錯誤,則需要在其中一個分支中修復該錯誤,然後將其合併到其餘分支中。也許其他源代碼庫更好地處理這種情況,但對於SVN,我想這是唯一的方法。
至於管理版本,我們使用maven。如果你採用「核心」,「額外的東西」,「更多的東西」的方法,maven可以提供幫助,因爲它可以很好地跟蹤每個組件的版本(使用pom)。
編輯:比爾的建議可能是最實際的。如果你使用最後的標誌,那麼編譯器應該拋出無法訪問的代碼。
- 1. 管理軟件的演示版本
- 2. Maven插件版本管理
- 3. 軟件版本
- 4. 軟件版本
- 5. 源代碼管理:支持多個版本的軟件
- 6. 軟件公司如何管理不同版本的程序?
- 7. 如何使用大量庫管理CVS中的軟件版本
- 8. Eclipse軟件管理
- 9. 管理InstallScript版本
- 10. PHP版本管理
- 11. 配置管理中的版本管理
- 12. TFS 2017版本管理工件文件從版本控制
- 13. 發佈管理軟件
- 14. 項目管理軟件
- 15. Emacs的軟件包管理
- 16. TFS:管理組件版本號?
- 17. Visual studio Lightswitch - 版本管理
- 18. 文檔版本管理
- 19. 使用SVN管理版本
- 20. subversion版本庫管理
- 21. Haskell軟件包版本
- 22. Node.js - NPM軟件包版本
- 23. 軟件版本標準
- 24. 軟件版本自動化
- 25. mac版本控制軟件?
- 26. Pinning R軟件包版本
- 27. 維護軟件版本
- 28. 如何在軟件包管理器控制檯中將「更新軟件包」更新爲舊版本?
- 29. 好的文件管理軟件
- 30. Linux文件夾/軟件包管理
它是什麼類型的應用程序?這是一個桌面應用程序,Web應用程序,本地可安裝的Intranet應用程序嗎?你可以提供的細節越多,答案就越好。 – 2010-03-22 22:27:24
這是一個Java應用程序,可以基於網絡或獨立(較輕版本)。在tomcat上運行(在基於web的版本中),需要一個數據庫 – user121196 2010-03-23 00:27:13