Как добавить WAR в EAR с Maven

У меня есть EAR с приложением, и мне нужно расширить это приложение моим собственным кодом, который упакован как WAR. Есть ли плагин maven, который может помочь мне поместить WAR в EAR?

Ручная процедура заключается в том, чтобы поместить WAR в EAR и добавить модуль в application.xml. Я хотел бы это автоматизировать.

РЕДАКТИРОВАТЬ: небольшое уточнение - проект WAR использует maven, но для EAR у меня есть только двоичный файл, и больше ничего.


person stalker    schedule 02.03.2011    source источник


Ответы (2)


Я бы создал новый модуль с <packaging>ear</packaging>.

В зависимости для этого ушного модуля включите ваш war модуль:

<dependency>
    <groupId>com.your.group.id</groupId>
    <artifactId>your-war-artifact</artifactId>
    <version>your-war-version</version>
    <type>war</type>
</dependency>

Теперь в подключаемые модули сборки для этого модуля уха включите maven-ear-plugin, например:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <finalName>MyEarFile</finalName>
        <version>5</version>
        <generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation>
        <modules>
            <webModule>
                <groupId>com.your.group.id</groupId>
                <artifactId>your-war-artifact</artifactId>
                <uri>YouWarFile.war</uri>
                <bundleFileName>YouWarFile.war</bundleFileName>
                <contextRoot>/appname</contextRoot>
            </webModule>
        </modules>
    </configuration>
</plugin>

При необходимости вы можете изменить конкретные значения конфигурации для webModule.

Теперь создайте родительский модуль (с <packaging>pom</packaging>) и добавьте к нему модуль war и модуль уха. Убедитесь, что вы правильно установили <parent> модулей war и ear.

Когда вы запускаете mvn package для этого нового родителя, war-файл будет создан военным модулем, а ear-файл (содержащий войну) будет создан Ear-модулем.

person joelittlejohn    schedule 02.03.2011
comment
Нужно ли мне добавлять WAR в качестве зависимости в EAR pom.xml? Как он узнает, где находится моя WAR, которая находится в веб-модуле? - person Tushar; 25.10.2012
comment
Ты пробовал это? Да, вам нужна зависимость в ушном модуле, как описано выше. Плагину maven-ear-plugin не требуется точное местоположение / путь к файлу war, поскольку он ссылается на него как на артефакт maven (используя groupId и artifactId, указанные в элементе webModule). - person joelittlejohn; 26.10.2012
comment
@joelittlejohn Почему мне нужно объявлять артефакт your-war-artifact два раза? Один раз в разделе зависимостей и еще раз в разделе webModule? Не могли бы вы объяснить? - person Geek; 11.07.2016
comment
@Geek Файл war - это зависимость, которая будет создана, если она еще не существует, maven будет использовать конфигурацию файла war pom для создания артефакта войны. Ссылка на webModule предназначена для того, чтобы артефакт войны был включен в файл ear. - person egallardo; 30.10.2017

Добавьте WAR в качестве зависимости и используйте плагин для ушей maven. Затем используйте ear: generate-application-xml цель и, наконец, ухо: ухо цель.

person Koziołek    schedule 02.03.2011
comment
Возможно, мне что-то не хватает, но я не понимаю, как использовать плагин для ушей maven. Дело в том, что у меня нет источника этого EAR. - person stalker; 02.03.2011
comment
если у вас есть файл EAR, вы можете его распаковать: maven.apache.org/plugins/maven-ear-plugin/examples/, а затем добавьте war, измените application.xml и снова запакуйте. - person Koziołek; 02.03.2011