Как объединить войны в одну?

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

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

Ответ 1

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

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

Ответ 2

Я помню, что 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)

Ответ 3

Очевидно, это можно сделать, но я думаю, что вам лучше было бы работать над одной ВОЙНОЙ, в первую очередь. Позднее "pick-and-mix" из WAR-контента звучит как кошмар поддержки для меня.

Ответ 4

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


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

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

Итак, моя рекомендация - это простая копия ресурсов и файл конфигурации xSLT для таблицы стилей x xml.

Ответ 5

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

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

Ответ 6

Возможно, вы сможете что-то работать с One-Jar.

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

Вероятно, он не делает все, что вам нужно.