Maven 2 заменить реализацию класса в зависимости от профиля? - PullRequest
4 голосов
/ 14 марта 2012

У меня есть MailTransport.java и два класса, расширяющих его: LiveMailTransport.java и TestMailTransport.java. LiveMailTransport действительно будет отправлять электронные письма, в то время как TestMailTransprot будет записывать их в журнал только для целей тестирования.

Где-то я делаю new MailTransport();, и я хотел бы заменить каждое использование MailTransport в моем коде на стороне сервера либо на Live-, либо на TestMailTransport в зависимости от профиля, используемого для компиляции (локальный, рабочий и т. Д. ..).

(аналогично gwts "replace-with" на стороне клиента ...)

Как я мог сделать это с Maven? Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

То, что вы хотите, это фабрика, которая принимает системное свойство. Если системное свойство не установлено, создайте экземпляр LiveMailTransport. Если свойство есть, создайте экземпляр TestMailTransport.

Предлагаемое название объекта: com.pany.app.enableTestMails

Boolean.getBoolean (String) ваш друг.

Теперь настройте плагин surefire для установки свойства и все готово.

0 голосов
/ 14 марта 2012

Если вы используете Spring или какую-либо другую инфраструктуру внедрения зависимостей, вы можете манипулировать зависимостями, внедряемыми на основе включения соответствующей конфигурации.

Но если вы хотите сделать это с простым голым Java-приложением, вы можете создать несколько фабрик, которые будут создавать соответствующие экземпляры вашего MailTransport и помещать эти фабрик в разные исходные папки. Затем используйте build-helper-maven-plugin , чтобы добавить соответствующую исходную папку на основе активных профилей.

0 голосов
/ 14 марта 2012

Это звучит как неправильное использование Maven, потому что это больше похоже на задачу внедрения зависимостей (например, guice), но с Maven нет никакой связи.

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