Java Maven项目中重复的context.xml
我有以下项目结构:Java Maven项目中重复的context.xml,java,maven,tomcat,Java,Maven,Tomcat,我有以下项目结构: src/ main/ java/ ... resources/ META-INF/ context.xml persistence.xml webapp/ WEB-INF/ web.xml ... ... test/ ... xml(特别是,buildpart)如下所示: <build> <finalNam
src/
main/
java/
...
resources/
META-INF/
context.xml
persistence.xml
webapp/
WEB-INF/
web.xml
...
...
test/
...
xml(特别是,build
part)如下所示:
<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>
...
maven编译器插件
3.1
org.apache.maven.plugins
maven战争插件
2.3
src/main/webapp/WEB-INF/WEB.xml
src/main/resources/META-INF/context.xml
问题是,context.xml
在由此引发的战争中翻了一番。它出现在
/META-INF
-这是它的正确位置,而且/WEB-INF/classes/META-INF
。我看到它和其他任何资源一样从resources
文件夹复制到这里应用程序部署完美无瑕,但这种重复确实困扰着我。我的设置有什么问题?n一般来说,对于基于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的内容顶部 因此您看到了重复。在
下添加
元素,并明确排除该文件
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>META-INF/context.xml</exclude>
</excludes>
</resource>
</resources>
src/main/resources
真的
META-INF/context.xml
对于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
,首先,我们讨论的是META-INF及其内容,而不是WEB-INF。好吧,我理解复制是如何发生的,问题是如何避免。是的,这看起来更像是一种变通方法,而不是一个明确的解决方案,但很有效。这个问题很久以前就被提出了。您现在有合适的解决方案吗?context.xml
应该位于webapp/META-INF下,并用src/main/webapp/META-INF/context.xml