批量移动Java类到新包

时间:2018-02-27 10:28:21

标签: java automated-refactoring

我愿意在Spring应用程序上进行测试,其中上下文启动时间变得太慢。一种方法是使包扫描更严格,但是我将不得不在所有更严格的包结构中移动所有bean实现(例如,从com.foo。*到com.foo.beans。*)。

当我启动容器时,Spring扫描了超过2500个bean(实现+接口),因此我假设我必须移动大约1000-1300个类。好消息是:我可以轻松地在上下文启动期间生成它们的列表...

但是,我还希望使用列表文件作为输入进行自动重构。在我开始编写一些涵盖此任务的脚本之前,市场上有什么东西可以完成这项任务吗?我不是很害怕来自外部的类调用,因为基本上所有bean都是注入bean,并且只应该使用接口来调用它们(如果dip原则在所有地方都正确应用,但我将能够手动处理异常!)。

顺便说一句,因为第一个答案似乎表明我没有足够解释这个问题:列表中的文件位于不同的包中,而包可能还有其他类,我不想移动。我最好的方法是找到一种方法来调用eclipse重构,将单个文件从a位置移动到b,但是我知道的文件连续1200次。我不会这样做,我没有找到任何工具可以为我做这个批量任务,虽然它是一个完全自动化的任务,不应该花费超过一分钟,但需要一整天的点击..

3 个答案:

答案 0 :(得分:1)

  

如果您使用的是eclipse IDE
  1.右键单击项目 - >重构 - >重命名
  2.右键单击项目 - >重构 - >移动

     

     
      
  1. 通过鼠标单击选择项目并使用快捷方式(Alt + Shift + R)-rename
  2.   
  3. 通过鼠标单击选择项目并使用快捷方式(Alt + Shift + V)-move
  4.   

答案 1 :(得分:0)

EclipseIntelliJ等IDE中重构软件包应该这样做。

答案 2 :(得分:0)

我想做同样的事情,但是发现没有批量解决方案。我唯一可以做到的方法是使用IntelliJ

  • 首先,尝试使用Refactor | Move

    将所有代码移动到新的命名空间中
  • 如果任何东西都是第三方或生成的(即不在您的src / main或src / test中),则不要移动它,并使用Refactor | Move移动该名称空间中的所有其他名称空间/类,您可以使用多选功能进行操作。

  • 当然,这将更改您移动的班级可以看到的班级。例如如果以前没有另一个lib位于同一个名称空间中,那么现在就不再存在,因此,如果没有显式导入,则不允许他们访问包中的内容。

  • 这可能会导致许多Error creating bean with name...类型错误。通过将ComponentScan添加到抱怨的类中,并同时使用新的和旧的命名空间,也许可以解决其中的大部分问题

    @ComponentScan({"com.mycompany.old.*", "com.mycompany.new.*"})
    
  • 如果您也有一个Spring存储库,那么实体(Not a managed type可能会遇到相同的问题。通过将以下内容添加到您的主应用程序中,以相同的方式解决它们。

    @EntityScan({"com.mycompany.old.*", "com.mycompany.new.*"})