我有一个非常简单的 WAR 项目,我想META-INF
在所有已编译的 Java 类所在的类输出文件夹的顶部包含一个名为的目录。我正在使用 Maven,但似乎默认情况下 Maven 不会包含任何不是 Java 类的东西。所以它忽略了我位于目录META-INF
顶部的src
目录。该META-INF
目录包含一个名为persistence.xml
. 关于如何指示 Maven 将此目录和文件放入输出文件夹的任何快速指示?
5 回答
一般来说,对于基于 Java 的 Maven 项目,非源文件应该放在src/main/resources
项目的子目录中。在构建的process-resources阶段,该目录的内容resources
被复制到输出目录(默认情况下,target/classes
) 。
对于 Maven WAR 项目,它稍微复杂一些:还有一个src/main/webapp
目录,Maven 期望在其中找到WEB-INF/web.xml
. 要构建您的 WAR 文件,该文件必须存在;否则,您将看到如下错误消息:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
由于该WEB-INF
目录必须存在于 下src/main/webapp
,我建议避免在src/main/resources
. 尽管这是完全有效的,并且两个目录的内容将被合并,但如果在两个目录中都定义了一个文件,它可能会让人感到困惑。的内容src/main/resources
将优先,因为它们是从 的内容顶部复制的src/main/webapp
。
我会间接回答你的问题,如果你已经跳转到 Maven2,我肯定会推荐使用 Archetype 插件。使用 webapp 原型将确保您最终获得规范的目录结构。其他任何查看您的来源的人都会立即知道所有内容在哪里,并且不会对您的文件去向有任何疑问。
把它放到 pom.xml 中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
在 POM.xml 中给出以下条目
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<!--webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory-->
<packagingExcludes>**/web.xml</packagingExcludes>
</configuration>
</plugin>