Как расширить / настроить WAR с другим проектом - PullRequest
9 голосов
/ 03 ноября 2010

У нас есть следующий сценарий с нашим проектом:

  • Базовое веб-приложение, упакованное в виде файла войны (назовите его Базовым проектом).
  • Необходимость «настроить» или «расширить» основное приложение для каждого клиента (назовите его «Проект клиента»).Это в основном включает в себя новые определения bean-компонентов (мы используем Spring), т.е.замена реализаций сервисов в core.war на специфичные для клиента реализации.
  • Мы хотим разрабатывать проекты Core и Customer независимо
  • Когда проект Customer разрабатывается, нам нужно иметь возможность запускать/ отладить его в Eclipse (в Tomcat) с проектом Core в качестве зависимости
  • Когда проект Customer создается, полученный файл войны «включает» проекты ядра и клиента.Таким образом, эта .war является специфической для клиента версией приложения

Я ищу предложения относительно наилучшего способа сделать это с точки зрения инструментов и конфигурации проекта.

В настоящее время мы используем Ant, но не хотим больше погружаться в муравья.Кто-нибудь делал это с Maven?

Я видел много постов о том, как создать веб-приложение, которое зависит от Java-приложения, но ничего о веб-приложении не зависит от другого веб-приложения.

Спасибо!

Ответы [ 5 ]

14 голосов
/ 03 ноября 2010

Похоже, Maven Оверлей WAR делает то, что вы хотите.

3 голосов
/ 03 ноября 2010

В Eclipse есть «родной» WTP способ сделать это.В основном это использование связанных папок и небольшой взлом в файле .settings / org.eclipse.wst.common.component.Вы можете прочитать статью об этом в http://www.informit.com/articles/article.aspx?p=759232&seqNum=3 главе под названием «Разделение веб-модуля на несколько проектов».Проблема заключается в том, что связанная папка должна относиться к некоторой переменной пути , которая может быть определена на вкладке Окно / Предпочтения / Общие / Рабочая область / Связанные ресурсы.В противном случае определение связанной папки (может быть найдено в файле .project в корне проекта) будет содержать определенный путь рабочей станции.Практически переменная пути должна быть корнем рабочей области.Это решение прекрасно работает с WTP, развертывание и все остальное работает как надо.

Второе решение - использовать для него муравей.Забудь это.Вы будете глубоко сожалеть об этом.

Третье решение - использовать maven для него.Вы можете забыть о комфорте публикации WTP, если не будете выполнять некоторые трюки.Используйте военные наложения, как и другие.Обязательно установите оба дополнения m2eclipse, m2eclipse.Недавно был выпущен плагин расширения, который может вам помочь.Описано в этом блоге .Я не пробовал, но выглядит хорошо.В любом случае Maven не имеет ничего общего со связанными папками, поэтому я думаю, что даже первое решение и этот оверлей maven могут жить вместе, если необходимо.

Что касается сборок без головы, вы можете использовать HeadlessEclipse для первойрешение.Он мертв (по мне) сейчас, но все еще работает :).Если вы используете материал Maven overlay + eclipse, то сборки без головы покрываются maven.

0 голосов
/ 03 ноября 2010

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

Например, скажем, ваше базовое приложение имеет некоторую концепцию объекта User и нуждается в поддержке общих пользовательских задач. Создать UserStore интерфейс;

public interface UserStore
{
    public User validateUser(String username, String password) throws InvalidUserException;
    public User getUser(String username);
    public void addUser(User user);
    public void deleteUser(User user);
    public void updateUser(User user);
    public List<User> listUsers();
}

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

Затем вы определяете UserStore как бин Spring и внедряете его в случае необходимости;

<bean id="userStore" class="com.mycorp.auth.DatabaseUserStore">
    <constructor-arg ref="usersDataSource"/>
</bean>

Это позволяет настраивать или расширять основное приложение в зависимости от потребностей конкретного клиента. Если клиент хочет интегрировать основное приложение со своим сервером Active Directory, вы пишете класс LDAPUserStore, который реализует ваш интерфейс UserStore с использованием LDAP. Сконфигурируйте его как Spring bean-компонент и упакуйте пользовательский класс как зависимый jar.

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

0 голосов
/ 03 ноября 2010

Вы обычно начинаете с исходного кода Java. WAR s не включает исходный код Java, только скомпилированные классы в WEB-INF/classes или JAR s в WEB-INF/libs.

Я бы использовал Maven и запустил с ним новый пустой проект веб-приложения: http://maven.apache.org/guides/mini/guide-webapp.html

После создания новой пустой структуры проекта скопируйте в нее исходный код Java (src/main/java) и заполните список зависимостей в pom.xml.

После того, как вы все это сделали, вы можете использовать mvn clean package для создания стандартного WAR файла, который вы можете развернуть в Tomcat.

0 голосов
/ 03 ноября 2010

Это немного сложнее, но на высоком уровне мы делаем это, как показано ниже. У нас есть основная платформа пользовательского интерфейса, разделенная на несколько военных модулей на основе функций (login-ui, catalog-mgmt-ui и т. Д.). Каждый из этих основных модулей настраивается персонализированной командой.

Мы объединяем все эти модули во время сборки в один военный модуль. Правила слияния основаны на плагине сборки maven.

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