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 文件中。
我有一个使用 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 文件中。