Создание Maven WAR-файла и EAR-файла, содержащего этот WAR-файл как один модуль с использованием классификатора? - PullRequest
1 голос
/ 06 марта 2012

Я понимаю, что это может показаться неправильным, но я пытаюсь установить POM (модуль) Maven, который при установке будет упакован как WAR, но, кроме того, как EAR, содержащий одну WAR.

Чтобы уточнить: я хочу обернуть каждую существующую WAR в моем проекте в свой EAR.

Причина моего желания в том, что я смотрю на реструктуризациюспособ, которым мы упаковываем наши выпущенные WAR-ы, чтобы каждый из них содержался в EAR-файле (но также создавал независимый WAR-артефакт для удобства разработки).Я не заинтересован в том, чтобы создать новый модуль, который зависит от WAR, и упаковать его в EAR, потому что у меня есть множество WAR.

В настоящее время я пытаюсь это сделать для одного из моих существующих модулей WAR, без успеха с использованием классификатора :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <parent>
        ...
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>se-index-webapp</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    ...
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <finalName>search-index.ear</finalName>
                    <classifier>ear</classifier>
                    <unpackTypes>war</unpackTypes>
                    <modules>
                        <webModule>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${artifactId}</artifactId>
                            <uri>search-index.war</uri>
                            <bundleFileName>search-index.war</bundleFileName>
                            <contextRoot>/SearchIndex</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${artifactId}</artifactId>
                        <version>${project.version}</version>
                        <type>war</type>
                    </dependency>
                </dependencies>
            </plugin>

        </plugins>
    </build>

    <dependencies>  
        ...
    </dependencies>

</project>

Я получаю сообщение об ошибке:

Artifact[war:myproject:se-index-webapp] is not a dependency of the project

Возможно ли то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 15 марта 2012

Первое, что вы должны изменить, это основано на соглашениях Maven, чтобы иметь отдельный модуль EAR, что приводит к следующей структуре:

  +-- root (pom.xml)
       +--- mod-ear (pom.xml) packaging: ear
       +--- mod-war (pom.xml) packaging: war

Чем вы можете определить зависимости для вашего модуля mod-war оченьпросто, давая

   <dependencies>
      <dependency>
          <groupId>..</groupId>
          <artifactId>..</artifactId>
          <version>..</version>
      </dependency>
   ...
  </dependencies> 

Преимущество этого подхода в том, что вы отделяете информацию, которая принадлежит уху, и информацию, которая принадлежит модулю уха.

В результате вы можете сделать mvn cleanпакет на корневом уровне или выполните установку / развертывание mvn, которая развертывает войну и уши в вашем хранилище.

...