我有以下项目结构:
src/
main/
java/
...
resources/
META-INF/
context.xml
persistence.xml
webapp/
WEB-INF/
web.xml
...
...
test/
...
pom.xml(具体来说,build
部分)看起来像这样:
<build>
<finalName>...</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<containerConfigXML>src/main/resources/META-INF/context.xml</containerConfigXML>
</configuration>
</plugin>
</plugins>
</build>
问题是context.xml
在生成的WAR中加倍。它出现在
/META-INF
- 这是正确的地方,/WEB-INF/classes/META-INF
。我看到它从resources
文件夹复制到此处,与任何其他资源一样。应用程序完美无缺,但这种复制确实困扰我。我的设置有什么问题?
答案 0 :(得分:1)
在<resources>
下添加<build>
元素,并明确排除该文件。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>META-INF/context.xml</exclude>
</excludes>
</resource>
</resources>
答案 1 :(得分:0)
通常,对于基于Java的Maven项目,非源文件应该放在项目的src / main / resources子目录中。在构建的进程资源阶段,该资源目录的内容被复制到输出目录(默认情况下为目标/类)。
对于Maven WAR项目,它稍微复杂一点:还有src / main / webapp目录,其中Maven希望找到WEB-INF / web.xml
由于WEB-INF目录必须存在于src / main / webapp下,我建议不要在src / main / resources中再次定义它。虽然这是完全有效的,并且两个目录的内容将被合并,但如果在两者中定义了文件,则会令人困惑。 src / main / resources的内容优先,因为它们被复制到src / main / webapp的内容顶部。
因此你看到了重复。
答案 2 :(得分:0)
对于WAR构建,maven使用以下默认值:
src/main/java goes to /WEB-INF/classes
src/main/resources goes to /WEB-INF/classes
src/main/webapp goes to /
因此,为了快速解决您的问题,只需将META-INF从src / main / resources移至src / main / webapp
另请确保您更新了containerConfigXML