лучший способ расширить существующий проект Java / Maven - PullRequest
0 голосов
/ 10 марта 2011

Я расширяю существующее Java-приложение, как с чистыми Java-модулями, так и с войной. Для войны я использую метод maven-war-overlay, который автоматически включает мои собственные файлы расширений поверх существующих файлов, если они названы одинаково.

Теперь для java-модуля я думал, что смогу расширить это отдельно, но как лучше? Я создал новый проект java-модуля и включил jar-файл исходного проекта в качестве зависимости. Есть ли способ изменить существующие свойства / методы в этом банке без создания подклассов? если я подкласс, существующий класс не будет знать об этом ...

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

Какой лучший способ оставить исходный исходный код в покое, но внести необходимые изменения?

1 Ответ

0 голосов
/ 10 марта 2011

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

Гораздо лучше изменить классы исходного проекта, чтобы можно было заменить реализации классов.Наличие контейнера IOC в проекте может облегчить этот процесс.Вы можете сделать это и без контейнера, например:

class WantToOverride { ... }

class UserOfWantToOverride {
  WantToOverride wantToOverride;

  public void setWantToOverride(WantToOverride wantToOverride) {
     this.wantToOverride= wantToOverride;
  }
}

Теперь, во время инициализации вашего проекта, вызовите

userOfWantToOverride.setWantToOverride(new OverridingClass(...))

, где ваш класс

class OverridingClass extends WantToOverride { ... }

Вы также можете наследовать Hibernate-классы, но вам нужно тщательно заботиться о Hibernate Inheritance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...