我有一个非常简单的WAR项目,我希望在类输出文件夹的顶部包含一个名为META-INF
的目录,其中包含所有已编译的Java类。
我正在使用Maven,但似乎默认情况下Maven不会包含任何不是Java类的内容。因此它忽略了位于META-INF
目录顶部的src
目录。
META-INF
目录包含名为persistence.xml
的文件。有关如何指示Maven将此目录和文件放入输出文件夹的快速指示吗?
答案 0 :(得分:82)
通常,对于基于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
的内容顶部。
答案 1 :(得分:11)
Maven希望在资源文件夹中输入此类信息。有关详细信息,请参阅here。
Project
|-- pom.xml
`-- src
`-- main
|-- java
`-- resources
有关指定其他资源目录的信息,请参阅here。
答案 2 :(得分:4)
我会间接回答你的问题,如果你已经跳转到Maven2,我肯定会推荐使用Archetype插件。使用webapp原型将确保您最终获得规范的目录结构。任何查看您的来源的人都会立即知道所有内容的位置,并且不会对您的文件位置有任何疑问。
答案 3 :(得分:4)
将其放入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>
答案 4 :(得分:0)
在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>