Несколько Java-проектов и рефакторинг - PullRequest
4 голосов
/ 04 марта 2009

Я недавно присоединился к проекту, который использует несколько разных проектов. Многие из этих проектов зависят друг от друга, используя JAR-файлы другого проекта, включенного в библиотеку, поэтому каждый раз, когда вы меняете один проект, вы должны знать, какой другой проект его использует, и обновлять их. Я хотел бы сделать это намного проще, и думал о слиянии всего этого Java-кода в один проект в отдельных пакетах. Можно ли сделать это, а затем развернуть только некоторые пакеты в банке. Я хотел бы не развертывать только его часть, но я был озвучен, если это возможно.

Есть ли лучший способ справиться с этим?

Ответы [ 5 ]

4 голосов
/ 04 марта 2009

Подход 1: Использование Hudson

Если вы используете сервер непрерывной интеграции, такой как Hudson , то вы можете настраивать проекты восходящего / нисходящего потоков (см. Терминология ).

Проект может иметь один или несколько последующих проектов. Нижестоящие проекты добавляются в очередь сборки, если текущий проект собран успешно. Можно настроить добавление нижестоящего проекта в очередь вызовов, даже если текущий проект нестабилен (по умолчанию выключен).

Что это означает, если кто-то проверяет какой-то код в одном проекте, по крайней мере вы получите раннее предупреждение, если он сломает другие сборки.

Подход 2: Использование Maven

Если проекты не слишком сложны, то, возможно, вы могли бы создать основной проект и сделать эти подпроекты дочерними модулями этого проекта. Однако преобразование проекта в форму, которая нравится Maven, может быть довольно сложным.

3 голосов
/ 04 марта 2009

Если вы используете Eclipse (или любую приличную IDE), вы можете просто сделать один проект зависимым от другого и указать этот аспект конфигурации в вашем SVN, а также принять проверки в ваших скриптах сборки.

Обратите внимание, что если один проект зависит от определенной версии другого проекта, Jar-файл является гораздо более простым способом управления этим. Крупный рефакторинг может сразу же потребовать много работы во всех других проектах, чтобы исправить положение, тогда как вы можете просто вставить новую банку в каждый проект по мере необходимости и выполнить миграцию.

2 голосов
/ 04 марта 2009

Полагаю, все зависит от конкретного проекта, но я думаю, что все проекты будут разделены. Это помогает поддерживать слабую связь всей системы. Вы можете использовать инструмент, такой как maven , чтобы помочь управлять всеми зависимостями между проектами. Такое управление зависимостями - одна из главных сильных сторон Maven.

1 голос
/ 04 марта 2009

Используя Ant в качестве инструмента сборки, вы можете упаковать свой проект любым удобным для вас способом. Однако, оставляя части вашего кода вне дистрибутива, кажется, что это может привести к ошибкам; Вы можете случайно пропустить необходимые классы (по-видимому, все ваши классы необходимы).

В отношении хранения вашего кода в разных проектах у меня есть свободная инструкция. Сохраните код, который изменяется вместе, в одном проекте и упакуйте его в свой собственный файл jar. Это работает лучше всего, когда часть вашего кода можно разбить на служебные библиотеки, которые меняются реже, чем ваше основное приложение.

Например, у вас может быть приложение, в котором вы сгенерировали классы клиентов веб-службы из WSDL веб-службы (используя что-то вроде библиотеки Axis). Интерфейс веб-службы, вероятно, будет меняться нечасто, поэтому вы не хотите, чтобы шаг регенерации повторялся все время в основной сборке приложения. Создайте отдельный проект для этой части, чтобы вам приходилось заново создавать клиентские классы веб-службы только при изменении WSDL. Создайте отдельную банку и используйте ее в своем основном приложении. Этот стиль также позволяет другим проектам повторно использовать эти служебные модули.

Следуя этому стилю, вы должны поместить номер версии в манифест jar, чтобы вы могли отслеживать, какие приложения используют какие версии вашего модуля. В зависимости от того, как далеко вы хотите зайти, вы также можете сохранить текстовый файл в банке, в котором подробно описаны изменения, произошедшие для каждой ревизии (во многом как библиотека с открытым исходным кодом).

0 голосов
/ 04 марта 2009

Это все возможно (у нас была такая же ситуация несколько лет назад). Насколько это сложно или просто, зависит от вашей среды IDE (рефакторинг, объединение, организация нового проекта) и инструмента сборки (развертывание). Мы использовали IDEA в качестве IDE и Ant в качестве инструмента для сборки, и это было не слишком сложно. Одно воскресенье (никто не работает + коммит), 2 человека на одном компьютере.

Я не уверен, что вы подразумеваете под

"развернуть только несколько пакетов в банке"

Я думаю, что вам понадобятся все они во время выполнения, не так ли? Как я понял, они зависят друг от друга.

...