批量将Java类移动到新包中

批量将Java类移动到新包中,java,automated-refactoring,Java,Automated Refactoring,我愿意在一个Spring应用程序上进行测试,因为上下文启动时间太慢了。一种方法是使包扫描更严格,但随后我必须将所有bean实现移到这个更严格的包结构中(例如,从com.foo.*移到com.foo.beans.*) 当我启动容器时,Spring扫描了2500多个bean(实现+接口),所以我假设我必须移动大约1000-1300个类。好消息是:在上下文启动期间,我可以轻松地生成它们的列表 但是,我还希望使用列表文件作为输入进行自动重构。在我开始写一些关于这个任务的脚本之前,市场上有什么东西可以完成

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

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

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


顺便说一句,因为第一个答案似乎表明我没有充分解释这个问题:列表中的文件位于不同的包中,这些包可能有我不想移动的其他类。我最好的方法是找到一种调用eclipse重构的方法,将单个文件从位置a移动到位置b,但对于我确实知道的文件,这会连续移动1200次。我不会一手完成这项任务,我也没有找到任何工具可以帮我完成这项批量任务,尽管这是一项完全自动化的任务,不会超过一分钟,但需要一整天的时间来点击…

在IDE中重构包,就像或者应该做的那样

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

  • 通过鼠标单击选择项目并使用快捷方式(Alt+Shift+R)-重命名
  • 通过鼠标单击选择项目并使用快捷方式(Alt+Shift+V)-移动

  • 我想做同样的事情,但发现没有批量解决方案。我唯一能做的就是使用IntelliJ

    • 首先,尝试使用
      Refactor|move

    • 如果任何内容是第三方的,或生成的(即不在您的src/main或src/test中),则不要移动它,并使用
      Refactor | move
      移动名称空间内的所有其他名称空间/类,您可以使用multi-select执行此操作

    • 当然,这将改变移动的类可以看到的类。e、 如果另一个lib以前在同一个名称空间中,那么现在不是了,所以如果没有显式导入,就不允许它们访问包中的内容

    • 这可能会导致大量创建名为…的bean的
      错误。可能您可以通过向抱怨的类添加
      ComponentScan
      ,使用新旧名称空间来解决大多数问题

      @ComponentScan({"com.mycompany.old.*", "com.mycompany.new.*"})
      
    • 如果您也有一个Spring存储库,那么您可能会在实体上遇到同样的问题(
      不是托管类型
      )。通过将以下内容添加到主应用程序,以相同的方式解决这些问题

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

    不,这会让我做100次,不是所有类都在同一个包中,这些包中可能还有其他类,我不想移动它们。。。对于10-20个班级,这种方法有效,对于1000+个班级,需要1-2天才能移动所有班级。。。我需要从Eclipse为单个类进行自动重构,但是自动调用它1000多次……那么类之间的关系是什么呢?即使你想写一个脚本,这些类也需要有一个共同的移动动作。所有这些都在以com.foo开头的包中,正如我所说的,我有一个1000多个类的列表,我只想更改包模式中的一个细节。例如,将com.foo.*移动到com.foo.bar.*不,这会让我做100次,不是所有的类都在同一个包中,而且这些包中可能还有其他我不想移动的类。。。对于10-20个班级,这种方法有效,对于1000+个班级,需要1-2天才能移动所有班级。。。我需要从Eclipse对单个类进行自动重构,但自动调用它1000多次……备份您的包,然后删除除一个组之外的所有类并重构,一旦完成粘贴第二个组重构,请继续。