Maven项目中重复的context.xml

时间:2013-05-14 12:16:14

标签: java maven tomcat

我有以下项目结构:

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中加倍。它出现在

  1. /META-INF - 这是正确的地方,
  2. /WEB-INF/classes/META-INF。我看到它从resources文件夹复制到此处,与任何其他资源一样。
  3. 应用程序完美无缺,但这种复制确实困扰我。我的设置有什么问题?

3 个答案:

答案 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