Как объединить войны в одну? - PullRequest
10 голосов
/ 07 октября 2009

В нашей компании у нас есть несколько различных модулей, построенных как отдельные войны. Каждый клиент может выбрать модуль, который он хочет купить. Поскольку все модули используют один и тот же сеанс, контекст безопасности и т. Д., Имеет смысл объединить их в одну войну.

Возможно ли автоматизировать этот процесс? Например, он должен объединить файл web.xml, рассчитать зависимости каждой войны, скопировать файлы, например .jsp, .class и т. Д. Кстати, мы используем Maven, но не смогли найти решение этой проблемы.

Ответы [ 6 ]

8 голосов
/ 07 октября 2009

Учитывая риски, упомянутые djna и ChssPly76, вы можете достичь этого, используя оверлеи с плагином Maven WAR . Это потребует от вас разделения отображений сервлета, чтобы гарантировать отсутствие коллизий URL-адресов и т. П., Но это может помочь.

По сути, вы создаете модуль с несколькими WAR-зависимостями и используете плагин для объединения их в новый.

4 голосов
/ 07 октября 2009

Я помню, что cargo-maven2-plugin имеет uberwar mojo. Я не использовал его, но я понимаю, что он предназначен для объединения войн, хотя вы должны быть осторожны, чтобы избежать конфликтов.

Быстрое сканирование источника показывает, что вы определяете merge descriptor, чтобы определить, как объединить войны. К сожалению, сайт документации пропал, поэтому я не могу дать вам больше подробностей.

Вы можете проверить сайт Codehaus Jira для понимания его текущего статуса.

Чтобы использовать плагин, вы должны указать конфигурацию примерно так:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <version>1.0</version>
      <extensions>true</extensions>
      <configuration>
      <descriptor>merge.xml</descriptor>
      </configuration>
    </plugin>
  </plugins>
</build>
<dependencies>
  <dependency>
    <groupId>project1.groupId</groupId>
    <artifactId>project1</artifactId>
    <type>war</type>
    <version>1.0.0</version>
  </dependency>
  <dependency>
    <groupId>project2.groupId</groupId>
    <artifactId>project2</artifactId>
    <type>war</type>
    <version>1.2.0</version>
  </dependency>
</dependencies> 

(все еще ищет пример merge.xml)

1 голос
/ 07 октября 2009

EAR предназначены для хранения нескольких вещей. Будет ли это возможность для вас?


Редактировать: Прежде всего, давайте предположим, что нет дублирующихся ресурсов (какой из них должен быть в финальной банке?) И что все банки совместимы (у вас есть только одна версия каждой библиотеки и т. Д.).

Вы должны иметь возможность просто скопировать содержимое WEB-INF / поверх друг друга, за исключением различных файлов XML, которые необходимо тщательно объединить. Возможно, самый простой способ сделать это - использовать таблицу стилей XSLT, которая позволяет вам хранить два XML-документа и объединять их (если я правильно помню, это тег). вам понадобится один файл для каждого XML-файла, чтобы убедиться, что вы делаете это правильно - просто подумайте о навигации JSF.

Итак, мой совет - простая копия ресурсов и созданный вручную файл конфигурации XSLT pr pr xml.

1 голос
/ 07 октября 2009

Совершенно очевидно, что это можно сделать, но я думаю, что вам лучше было бы сначала поработать над одной WAR.Позднее "выбор и смешивание" содержания WAR показалось мне кошмаром поддержки.

0 голосов
/ 07 октября 2009

Возможно, вы сможете получить что-то, работающее с One-Jar.

http://one -jar.sourceforge.net /

Это, вероятно, не делает все, что вы хотите.

0 голосов
/ 07 октября 2009

Вообще говоря - нет, это невозможно. Что делать, если у вас есть повторяющиеся имена JSP? Имена / сопоставления сервлетов? Загрузка тех же прослушивателей контекста с разными параметрами (часто, если вы используете Spring / Struts / etc ...)? Вы получаете смысл.

В вашем конкретном случае это может или не может быть возможно в зависимости от ваших конкретных обстоятельств. Извлечение войны и копирование JSP / классов / библиотек легко; объединение web.xml немного сложнее, так как вам нужно поддерживать порядок элементов - может быть проще вручную определить «объединенный» web.xml.

...