Maven对Web应用程序的依赖性

时间:2011-06-30 08:41:26

标签: web-applications maven dependencies

我刚刚想到了maven的依赖系统,我问自己,是否有可能依赖Web应用程序(* .war文件)? 我想将应用程序的核心模块维护为普通的Web应用程序。更具体的实现将使用核心作为依赖并扩展它。

例如,我有以下内容:

  1. Core.war //后端
  2. ConcreteProject1.war //客户1的前端
  3. ConcreteProject2.war //客户2的前端
  4. 具体项目现在应该依赖于Core.war并包括所有网页,其他资源,源文件等,但如果在上下文路径中存在具有相同名称的文件,则具体项目应该覆盖原始的。如果有可能合并这些文件会更好!试想一下,例如一个日志配置文件,它将与自定义配置文件合并,以便为客户端进行特殊处理。还有许多其他用例会非常有用。

    有人能给我一些提示,告诉我在构建过程中如何处理这样的行为吗?

1 个答案:

答案 0 :(得分:2)

你需要这些内容......

假设你有两个模块 - 核心和web-module1,你需要在战争中将它们组装起来。

核心的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>