Как объединить войны в одну?
В нашей компании у нас есть несколько разных модулей, построенных как отдельные войны.
Каждый клиент может выбрать и выбрать модуль, который он хочет купить.
Поскольку все модули используют один и тот же сеанс, контекст безопасности и т.д., Имеет смысл объединить их в одну войну.
Можно ли автоматизировать этот процесс? Например, он должен объединить 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/
Вероятно, он не делает все, что вам нужно.