Инструмент рефакторинга/реструктуризации для Java

У меня есть большое монолитное веб-приложение, которое я хочу разбить на более мелкие модули. В качестве первого шага я хотел бы изменить иерархию пакетов, которая в настоящее время выглядит так:

 - 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 и перетаскивать пакеты, но я ищу что-то, что могло бы сделать это с минимальным моим участием, так как это будет очень повторяющимся.


person Emil H    schedule 01.03.2012    source источник
comment
Если бы вы начали работать над ним в Eclipse вместо того, чтобы писать этот вопрос, вы бы уже наполовину сделали.   -  person Erick Robertson    schedule 01.03.2012
comment
@ErickRobertson Поверь мне ... я бы не стал ;)   -  person Emil H    schedule 01.03.2012
comment
@Emil h Вы нашли какое-нибудь решение для этого?   -  person user1283633    schedule 26.05.2013
comment
@ user1283633 Нет. В итоге мы провели рефакторинг с использованием Eclipse, аккуратно переместив каждый класс/пакет и обеспечив обновление ссылок на имена классов в куче разных xml-файлов. Одна вещь, на которую следует обратить внимание, это то, что если вы сериализовали класс, вам нужно обработать, что эти классы больше не существуют (поскольку его пакет будет изменен). На рефакторинг всего проекта у нас ушло примерно две человеко-недели. Но это плохо структурированный проект, поэтому YMMV :)   -  person Emil H    schedule 27.05.2013


Ответы (2)


Вы можете использовать любую Java IDE с совместимостью рефакторинга:

  • IntelliJ IDEA (лучшая поддержка рефакторинга). Он имеет версию сообщества с открытым исходным кодом и окончательную версию с закрытым исходным кодом.
  • Затмение (из открытых источников)
  • NetBeans (с открытым исходным кодом)

Я не рекомендую вам использовать поиск/замену регулярных выражений, так как это подвержено ошибкам.

person Konstantin Solomatov    schedule 01.03.2012
comment
Я бы не стал использовать регулярное выражение для этого. Однако мне бы хотелось, чтобы, например, рефакторинг переименования в eclipse мог взять регулярное выражение и использовать его для изменения имени. - person Emil H; 05.03.2012

Почему бы не использовать саму Java? Я полагаю, что в вашем текущем сценарии вы могли бы легко написать небольшую программу на Java, чтобы выполнить именно те рефакторинги, о которых вы говорите, и гарантировать, что ничего не будет упущено на этом пути.

Вы можете написать метод, который принимает параметры «pre» (т. е. «com.companyname.project.dao.bean.booking») и «post» (т. е. «com.companyname.project.booking.dao.bean») и копирует "pre" структура соответственно в "post" структуру.

В этой программе я предполагаю основной метод и метод "convertPackage(pre,post)". Затем у вас может быть массив ваших структур «pre» и «post» и циклическое преобразование их в новые. Было бы лучше сделать это копирование в какой-то временный каталог, а не копаться в оригинале в качестве дополнительной меры безопасности.

Может быть, я слишком просто думаю об этом, но я видел программу, созданную для такого рефакторинга за 1/2 дня или меньше.

Вы получите дополнительное преимущество, зная, точно что меняется, а не неуверенность, связанную с этими автоматизированными инструментами, которые могут сделать это правильно для вас, а могут и нет...

person Zack Macomber    schedule 28.03.2012