Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将中型代码库从Java1.4.2迁移到Java5的策略_Java_Refactoring_Migration - Fatal编程技术网

将中型代码库从Java1.4.2迁移到Java5的策略

将中型代码库从Java1.4.2迁移到Java5的策略,java,refactoring,migration,Java,Refactoring,Migration,我正在审查一个代码库(~20K LOC),并试图确定如何将其从1.4.2迁移到5。显然,这不是一个一朝一夕的项目,我收到的建议是针对Java5编写新代码,并以零碎的方式迁移旧代码。另外,我对Java5中的新特性不是专家(也就是说,我知道它们,但从未为生产使用编写过) 我的问题是: 生产代码中通常使用Java 5的哪些功能?(即泛型、自动装箱等)是否有需要避免/不被视为最佳实践的功能 我可以使用什么样的重构策略来迁移这种大小的代码库?(即,仅在编辑类时一次对一个类进行更改等)目标-降低代码基础上的

我正在审查一个代码库(~20K LOC),并试图确定如何将其从1.4.2迁移到5。显然,这不是一个一朝一夕的项目,我收到的建议是针对Java5编写新代码,并以零碎的方式迁移旧代码。另外,我对Java5中的新特性不是专家(也就是说,我知道它们,但从未为生产使用编写过)

我的问题是:

  • 生产代码中通常使用Java 5的哪些功能?(即泛型、自动装箱等)是否有需要避免/不被视为最佳实践的功能

  • 我可以使用什么样的重构策略来迁移这种大小的代码库?(即,仅在编辑类时一次对一个类进行更改等)目标-降低代码基础上的风险。限制-用于重构的资源

  • 任何建议都将不胜感激-提前感谢

    更新-晚了一年,但迟做总比不做好?=)

    谢谢你的所有评论-很多很棒的观点。在软件开发人员的生活中,总会有一些项目是你努力完成的,但却因为一些更“紧急”的事情而无法完成

    关于Java5的使用(当时),这是客户机的生产环境所必需的,所以这就是为什么我们没有使用Java6

    我发现,对于集合、枚举和原语的取消装箱,我倾向于将更强的类型化功能应用于新旧代码。重构是相当直接的,但代码理解能力显著提高,标准变得更容易实施。我遇到最多麻烦的是泛型;我认为这是一个我还没有机会完全理解和理解的概念,所以我很难找到以前适用泛型的案例


    再次感谢每一位对此帖子做出贡献的人,并为迟来的跟进表示歉意。

    仿制药的“病毒性”本质存在一个非常真实的问题;一旦您开始在架构中的给定层引入它们,您通常也希望在上面和下面的层引入它们。我发现引入泛型可能最好在完全“垂直”的情况下完成。但是你不必一次完成所有的垂直操作。

    你可能想迁移那些在从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