Сборки Maven и внедрение зависимостей с использованием Spring - PullRequest
1 голос
/ 29 марта 2012

У меня есть приложение Java, которое управляется с помощью Maven.Проект включает в себя концепции стран, которые делают что-то, например

public interface ICountry {
    public void doSomething();
}

public class England implements ICountry {...}
public class Brazil  implements ICountry {...}

public class CountryApp {
    public static void main (String args[]) {

        ICountry country = null;

        // PSEUDOCODE:
        // Retrieve a chosen implementation of ICountry using Spring

        country.doSomething();
    }
}

Из того, что я видел в Spring , я мог бы потенциально иметь один файл конфигурации Spring для каждой страны.Похоже, можно использовать Maven profile для выбора соответствующего файла конфигурации, используя элемент в профиле.Однако в документации говорится, что профили предназначены для поддержки построения в разных средах, а не в разных конфигурациях приложения.

Похоже ли это на разумный подход?Если кто-то знает о лучшем или «более стандартном» способе, пожалуйста, дайте мне знать:)

РЕДАКТИРОВАТЬ: В конечном итоге я бы хотел создать .jar для каждой страны.например,

  • myapp-england.jar,
  • myapp-brazil.jar и т. д.

Ответы [ 2 ]

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

Я вижу несколько решений для этого ...

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

Если вы хотите сохранить его в одном проекте, вам нужноподумать о том, когда принимать решение о том, какую страну использовать: во время сборки или во время выполнения?С Maven вы получите решение во время сборки, тогда как Spring - решение во время выполнения.Если вы хотите иметь возможность принимать решение во время выполнения, возможно, вам подойдет файл свойств.Запустите сборку как можно более универсально, без какой-либо ссылки на используемую страну, а затем позвольте пользователю или администратору решить, какую страну использовать во время выполнения, например, предоставив файл свойств, который имеет ссылку на файл контекста Spring для использования.В вашем методе main вы можете загрузить этот файл свойств из пути к классам и решить, какой файл контекста Spring загрузить.

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

2 голосов
/ 30 марта 2012

Используя профили, вы можете запустить программу с различными реализациями, указывающими реализацию для запуска в переменной, управляемой профилями Maven.Я сделал это в нескольких проектах, но один код, одна банка.Построить разные jar для каждой реализации сложнее.

Лучше было бы создать мультипроект Maven, то есть проект с несколькими файлами pom.xml, каждый со своей конфигурацией и реализацией.

- Parent project 
  - common project (interfaces and common codec)
  - country 1 project (with dependency of common project)
  - country 2 project (with dependency of common project)
  - ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...