将中型代码库从Java1.4.2迁移到Java5的策略
我正在审查一个代码库(~20K LOC),并试图确定如何将其从1.4.2迁移到5。显然,这不是一个一朝一夕的项目,我收到的建议是针对Java5编写新代码,并以零碎的方式迁移旧代码。另外,我对Java5中的新特性不是专家(也就是说,我知道它们,但从未为生产使用编写过) 我的问题是:将中型代码库从Java1.4.2迁移到Java5的策略,java,refactoring,migration,Java,Refactoring,Migration,我正在审查一个代码库(~20K LOC),并试图确定如何将其从1.4.2迁移到5。显然,这不是一个一朝一夕的项目,我收到的建议是针对Java5编写新代码,并以零碎的方式迁移旧代码。另外,我对Java5中的新特性不是专家(也就是说,我知道它们,但从未为生产使用编写过) 我的问题是: 生产代码中通常使用Java 5的哪些功能?(即泛型、自动装箱等)是否有需要避免/不被视为最佳实践的功能 我可以使用什么样的重构策略来迁移这种大小的代码库?(即,仅在编辑类时一次对一个类进行更改等)目标-降低代码基础上的
再次感谢每一位对此帖子做出贡献的人,并为迟来的跟进表示歉意。仿制药的“病毒性”本质存在一个非常真实的问题;一旦您开始在架构中的给定层引入它们,您通常也希望在上面和下面的层引入它们。我发现引入泛型可能最好在完全“垂直”的情况下完成。但是你不必一次完成所有的垂直操作。你可能想迁移那些在从1.4到5的转换中不起作用的东西(不确定那会是什么),但我会小心为了迁移而迁移东西 如果您选择此路线,请回答以下问题: 你们有全面的测试覆盖范围吗?如果没有,您应该为要迁移的代码编写单元测试 您的代码库中是否有广泛使用的组件?如果是这样的话,就其API而言,它们可能是要迁移的候选对象(例如,使用泛型等)
就Java5中广泛使用的内容而言。仿制药很重要,它能让你的生活更轻松。我没有看到太多的自动装箱,也没有枚举(这都是相对的)。瓦拉格斯几乎从来没有。注释对于框架很有用,但我使用它们。我想我自己从来没有实现过一个。这是一个很难回答的问题,因为这取决于什么代码会受到影响以及代码的重要性 首先也是最重要的一点是,当迁移是一项非常重要的任务时,请帮自己一个忙,升级到Java的最新版本,即Java 6而不是Java 5。Java6已经推出一年半或更长时间了,并且已经成熟。没有理由不选择Java5(imho) 其次,像任何软件项目一样,您的目标应该是尽快将某些东西投入生产。因此,您需要确定系统的一部分。越小越好,越不重要越好 另一件事就是试着在Java6下启动你的应用程序,看看有什么问题。情况可能比你想象的更糟。也许会好得多 你可能需要注意的另一件事是,从它的声音来看,你的应用程序中会有一些JAR/库,这些JAR/库后来被弃用了。有些甚至可能与1.4.2之外的Java不兼容。您可能还想将所有这些都升级到最新版本 这可能意味着更多的东西被破坏,但使用旧的/不推荐使用的API只会让你扫兴,并给你带来其他问题 在升级可能产生深远影响的情况下,也存在例外情况。我想到了Axis1到Axis2。这些情况需要更仔细的考虑 至于使用什么功能。。。几乎都是。我脑子里想不出任何应该避免的事情 此外,我刚刚注意到您的项目规模:~20K LOC。这实际上相当小(例如,在过去的3个月里,我自己编写了一个大小与之相当的应用程序) 最后,这也取决于你能多容易地找到断裂的东西。如果你有很好的单元测试覆盖率,那就太好了。不过这很少见。如果你能运行应用程序并可靠地发现问题,那就不太糟糕了
有问题的情况是场景很难测试,而且很可能你不会马上发现问题。这需要更加谨慎 Java5几乎完全向后兼容Java4。通常,迁移时必须做的唯一更改是重命名Java 4代码中新
enum
关键字的任何用法
下面列出了潜在兼容性问题的完整列表:
我在实践中遇到的另一个问题与JAXP实现中的更改有关。在我们的例子中,它只是意味着从类路径中删除xerces.jar
就重构而言,我认为迁移集合类以使用新的stro