Maven:在classes文件夹中包含一个META-INF文件夹

我有一个非常简单的WAR项目,我想在所有已编译的Java类所在的类输出文件夹的顶部包含一个名为META-INF的目录。 我正在使用Maven,但似乎默认情况下,Maven将不包含任何不是Java类的东西。 所以它忽略了位于src目录顶部的META-INF目录。 META-INF目录包含一个名为persistence.xml的文件。 任何有关如何指示Maven将此目录和文件放入输出文件夹的快速指针?

通常,对于基于Java的Maven项目,非源文件应该放在项目的src/main/resources子目录中。 该resources目录的内容在构build的过程资源阶段被复制到输出目录(默认情况下是target/classes )。

对于Maven WAR项目,它稍微复杂一些:还有src/main/webapp目录,其中Maven期望findWEB-INF/web.xml 。 要构buildWAR文件,该文件必须存在; 否则,你会看到这样的错误信息:

 [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) 

由于在src/main/webapp下必须存在WEB-INF目录,我build议避免在src/main/resources再次定义它。 虽然这是完全有效的,并且两个目录的内容将被合并,但是如果在两个目录中定义了一个文件,则会引起混淆。 src/main/resources的内容将优先于src/main/webapp中的内容的顶部。

Maven在资源文件夹中需要这种types的信息。 在这里看到更多的信息。

 Project |-- pom.xml `-- src `-- main |-- java `-- resources 

有关指定其他资源目录,请参阅此处 。

把它放到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> 

我会间接地回答你的问题,说如果你已经跳到Maven2我肯定会推荐使用Archetype插件。 使用webapp原型将确保您最终具有规范的目录结构。 任何其他人看你的来源将立即知道一切是什么,不会有任何问题,你的文件去。

在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>