我打算用现有的代码库在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