Tho*_*sen 12 java project-management dependency-injection java-ee-6
我在一家小商店工作,我们有很多传统的Cobol代码,并采用了一种方法,使我们尽可能地减少分叉和分支.
对于给定的版本,我们有三个级别:
当需要一个程序时,首先在CUSTOMER中搜索它,然后在GROUP中搜索,最后在CORE中搜索.我们的给定应用程序调用许多程序,这些程序都按此顺序查找(在Windows下考虑exe文件和PATH).
我们还有Java程序与这些遗留代码进行交互,并且由于核心组客户查找机制并不能轻易地将其自身扩展到Java,因此每个客户都需要在CVS分支中增长,这需要过多的维护.Java部分和后端部分倾向于并行开发.
我被指派找出让两个世界相遇的方法.
从本质上讲,我们需要一个Java环境,它允许我们为每个版本提供一个包含源代码的代码库,我们可以轻松地选择一个组和一个客户,并为该客户提供应用程序,然后轻松切换到另一个代码集而那个顾客.
我想到的可能是每个核心,客户和组都有一个Eclipse项目的场景,然后使用项目集来选择我们需要的特定场景.我无法理解的问题是,我们将如何在CORE项目中创建健壮的代码,无论选择哪个组和客户,这些代码都能正常工作.一个Factory类,它知道要调用的传递的Class对象的哪个子类而不是每个新的?
其他人必须有类似的代码库管理问题.有经验的人分享?
编辑:上述问题的结论是,CVS需要替换为更适合同时处理多个分支的源代码管理系统以及将源从一个组件迁移到另一个组件同时保留历史记录.受到最近slf4j和logback迁移的启发,我们目前正在研究git,因为它可以很好地处理分支.我们也考虑过subversion和mercurial,但git似乎对单个位置,多分支项目更好.我在另一个问题上询问了Perforce,但我个人倾向于采用开源解决方案来解决这个问题.
编辑:经过一些更多的思考,我们发现我们的实际痛点是我们在CVS中使用分支,如果分支所有文件,CVS中的分支最容易使用!修改后的结论是,我们可以单独使用CVS,切换到java项目的森林,每个项目对应一个上面的级别,并使用Eclipse构建路径将它们绑定在一起,这样每个CUSTOMER版本都会引入相应的GROUP和CORE项目.我们仍然希望切换到更好的版本控制系统,但这是一个非常重要的决定,所以我们希望尽可能地延迟它.
编辑:我现在使用Google Guice 2.0进行了CORE-GROUP-CUSTOMER概念的概念验证实现 - @ImplementedBy标签正是我们所需要的.我不知道其他人做了什么?使用if到处都是?
编辑:现在我还需要这个功能的Web应用程序.Guice直到JSR-330到位.有版本经验的人吗?
编辑:JSR-330/299现在已经与基于JBoss Seam的JEE6参考实现Weld一起使用了,我已经用Weld重新实现了概念验证,并且可以看到如果我们在bean中使用@Alternative和.... xml我们可以得到我们想要的行为.即为CORE中的给定功能提供新的实现,而不改变CORE jar中的位.初步阅读Servlet 3.0规范表明它可能支持Web应用程序资源(而不是代码)的相同功能.我们现在将对实际应用程序进行初始测试.
对于没有直接回答你的问题,我提前表示歉意。您问“我们如何设计我们的软件以避免必须进行某种类型的发布工程?我不知道这个问题的答案,但我读了您的描述,我对此感到担心。在它root,我认为让你的核心软件工程需求服从于你的发布工程技术是一场失败的游戏。
换句话说,如果您的客户确实需要单独的版本,那么您将不得不处理这个问题。我读到您说的是您希望使用 Eclipse 来完成您的版本控制软件应该为您完成的工作。我认为这不是一个可行的解决方案。
我打赌你能明白我的意思。如果问题实际上是“在 CVS 中分支太痛苦”,那么我认为技术解决方案是“迁移到 CVS 到允许更强大、更容易分支和集成的东西”。
在自由软件世界中,这通常意味着 Subversion。Perforce 是一个很好的商业替代方案。我可以说,我所工作的公司向许多客户发布了多个软件版本,并且经常从一个分支到另一个分支交叉集成更改。我们使用 Perforce,分支(和集成)非常简单,任何工程师都可以并且确实定期这样做,而不会中断他们的日常工作。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |