Java EE / Maven - 将 WEB-INF 文件夹打包成多个 war

Java EE / Maven - package WEB-INF folder into multiple wars

我有一个使用 Maven 打包为 EAR 的 Java EE 项目,它包含两个 WAR 模块(一个网络一个移动),结构如下:

EAR
    -Entities.jar
    -EJB.jar
    -Test.jar
    -Web.war
    -Mobile.war

我在 Web 中有一个目录。war/WEB-INF 其中包含一些 .xhtml 文件,这两个文件都是 .wars

有什么方法可以指示 Maven 在构建期间自动将此目录复制到另一个目录中。war?

例如。我愿意..

WebApp-Web/src/main/webapp/WEB-INF/emails/*

构建

WebApp/WebApp-web/WEB-INF/emails

WebApp/WebApp-mobile/WEB-INF/emails

(我正在使用 maven-war-plugin 顺便说一句)

如果您将共享资源添加到 "parent project"(或其他地方),您可以在 maven-war-plugin 的 webResources 标签(对于两个 web 项目)中定义相对路径:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <webResources>
            <resource>
                <directory>../src/main/resources</directory>
                <targetPath>WEB-INF</targetPath>
            </resource>
        </webResources>
    </configuration>
</plugin>

另一种方法是在构建时使用 maven-resources-plugin 从相对路径复制文件,但我相信 maven-war-plugin 方法更好。

使用 maven-resources-plugin:(来源 how-to-get-a-war-package-with-resources-copied-in-web-inf) 我只更改了目录,使其相对于其父目录(即:../src/main/resource

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.2</version>
    <executions>
      <execution>
        <id>default-copy-resources</id>
        <phase>process-resources</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <overwrite>true</overwrite>
          <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory>
          <resources>
            <resource>
              <directory>../src/main/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

如果您使用的是实现 Servlet 3.0 或更新版本的 Web 容器,那么您可以利用 Web 片段功能将这些常用文件构建到一个 jar 文件中,该文件被添加到 WEB-INF/lib 目录每个网络应用程序。

通过将 xhtml 文件等 Web 资源放在 jar 文件的 META-INF/resources 目录中,使它们可用。任何可能与这些 xhtml 文件关联的 web.xml 配置都可以放在 META-INF/web-fragment.xml 文件中。