Java重构/重构工具

Java重构/重构工具,java,refactoring,automated-refactoring,Java,Refactoring,Automated Refactoring,我有一个大型的单片Web应用程序,我希望它能分解成更小的模块。作为第一步,我想更改包层次结构,它当前看起来像: - com.companyname.project - dao - bean - booking // possibly containing more sub packages - core ... etc etc (there are a bunch of others as well) - se

我有一个大型的单片Web应用程序,我希望它能分解成更小的模块。作为第一步,我想更改包层次结构,它当前看起来像:

 - com.companyname.project
  - dao
     - bean
         - booking // possibly containing more sub packages
         - core   
         ... etc etc (there are a bunch of others as well)
     - service
         - booking // possibly containing more sub packages
         - core   
         ... etc etc  
  - logic
     - bean
         - booking // possibly containing more sub packages
         - core   
         ... etc etc
     - service
         - booking
         - core   
         ... etc etc
  - web
     - bean  // same substructure as above...
     - service  // same substructure as above...
     - taglib  // same substructure as above...
     - util
如果包结构使用例如
booking
作为下面的包名
com.companyname.project

现在我想知道是否有一个工具,例如,可以使用一个简单的正则表达式为我进行重组

例如
com.companyname.project.dao.bean.booking

将成为:
com.companyname.project.booking.dao.bean

com.companyname.project.dao.service.booking

将成为:
com.companyname.project.booking.dao.service


我可以使用Eclipse并拖放包,但我正在寻找一种只需很少参与就可以做到这一点的方法,因为这将是非常重复的

您可以使用任何具有重构兼容性的Java IDE:

  • IntelliJ IDEA(最佳重构支持)。它有开源社区版和开源终极版
  • Eclipse(开源)
  • NetBeans(开源)

我不建议您使用regexp search/replace,因为它很容易出错。

为什么不使用Java本身呢?我相信在您当前的场景中,您可以轻松地编写一个小型Java程序来执行您所讨论的精确重构,并确保在进行重构的过程中不会遗漏任何内容

您可以编写一个方法,使用“pre”(即“com.companyname.project.dao.bean.booking”)和“post”(即“com.companyname.project.booking.dao.bean”)参数,并将“pre”结构适当地复制到“post”结构中

在这个程序中,我设想了一个main方法和一个“convertPackage(pre,post)”方法。然后,您可以拥有一个“pre”和“post”结构的数组,并通过将它们转换为新结构进行循环。最好将此复制到某种临时目录中,而不要将原始目录弄脏,这是一种额外的安全措施

也许我的想法太简单了,但我可以看到一个程序可以在一天或更短的时间内完成重构


您将获得额外的好处,确切地了解正在发生的变化,而不是这些自动化工具带来的不安全感,这些工具可能适合您,也可能不适合您……

如果您在Eclipse中开始研究它,而不是写这个问题,您现在已经完成了一半。@ErickRobertson相信我。。。我不会;)@Emil h你找到解决办法了吗?@user1283633没有。我们最终使用Eclipse进行重构,小心地移动每个类/包,并确保更新了一堆不同xml文件中对类名的引用。需要注意的一件事是,如果您序列化了一个需要处理的类,那么这些类将不再存在(因为它的包已经更改)。我们花了大约两个人周的时间来重构整个项目。但是,这是一个结构很差的项目,所以YMMV:)我不会为此使用regexp。不过,我希望eclipse中的重命名重构可以使用regexp并将其用于名称更改。