Maven зависимость от веб-приложения - PullRequest
3 голосов
/ 30 июня 2011

Я только что подумал о системе зависимостей maven и спросил себя, можно ли иметь зависимость от веб-приложения (файл *. War)?Я бы хотел сохранить основной модуль приложения как обычное веб-приложение.Более конкретные реализации будут использовать ядро ​​в качестве зависимости и расширять его.

Например, у меня есть следующее:

  1. Core.war // Backend
  2. ConcreteProject1.war // Внешний интерфейс для клиента 1
  3. ConcreteProject2.war // Внешний интерфейс для клиента 2

Теперь конкретный проект должен зависеть от Core.war и включать все веб-страницы.другие ресурсы, исходные файлы и т. д., но если в контекстном пути существует файл с таким же именем, конкретный проект должен переопределить исходный.Было бы еще лучше, если бы можно было объединять такие файлы!Подумайте, например, о файле конфигурации журнала, который будет объединен с пользовательским для специальной обработки для клиента.Есть много других случаев использования, где это было бы действительно полезно.

Может ли кто-нибудь дать мне подсказку о том, что я могу сделать, чтобы получить такое поведение в процессе сборки?

1 Ответ

2 голосов
/ 30 июня 2011

Вам нужно что-то в этом духе ...

Скажем, у вас есть два модуля - основной и веб-модуль1, и вам нужно собрать их в конце войны.

POM ядра:

<project>

    <groupId>com.foo</groupId>
    <artifactId>core</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <archiveClasses>false</archiveClasses>
                    <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>

                    <webappDirectory>${project.build.directory}/mywebapp</webappDirectory>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

POM модуля, который зависит от ядра:

<project>

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo</groupId>
    <artifactId>web-module1</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>

                    <overlays>
                        <overlay>
                            <excludes>
                                <exclude>**/web.xml</exclude>
                            </excludes>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>core</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
            <type>war</type>
        </dependency>
    </dependencies>

</project>

Сборка:

<project>

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo</groupId>
    <artifactId>web-assembly</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <archiveClasses>false</archiveClasses>
                    <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>

                    <webResources>
                        <resource>
                            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                            <includes>
                                <include>*.xml</include>
                            </includes>
                            <targetPath>WEB-INF</targetPath>
                        </resource>
                    </webResources>

                    <webappDirectory>${project.build.directory}/mywebapp</webappDirectory>
                    <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>

                    <overlays>
                        <overlay>
                            <excludes>
                                <exclude>**/web.xml</exclude>
                            </excludes>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.foo</groupId>
            <artifactId>core</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>com.foo</groupId>
            <artifactId>web-module1</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>

</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...