【问题标题】:Maven: Including a META-INF folder in the classes folderMaven:在类文件夹中包含一个 META-INF 文件夹
【发布时间】:2010-11-20 19:32:00
【问题描述】:

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

【问题讨论】:

  • 好问题,谢谢。

标签: java web-applications maven-2 jakarta-ee maven-plugin


【解决方案1】:

一般来说,对于基于 Java 的 Maven 项目,非源文件应该放在项目的 src/main/resources 子目录中。 resources 目录的内容在构建的process-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 的内容顶部复制的。

【讨论】:

  • Thje 原来的问题其实是关于 META-INF 而不是 WEB-INF,虽然 web.xml 进入 WEB-INF 文件比如 context.xml 需要在 META-INF 中,但是解决方法很多相同。在 webapp 中创建一个 META-INF 文件夹并将 context.xml 放入其中。
  • 非常感谢!
【解决方案2】:

把这个放到 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>

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我会间接回答你的问题,如果你已经跳转到 Maven2,我肯定会推荐使用 Archetype 插件。使用 webapp 原型将确保您最终获得规范的目录结构。其他任何查看您的源的人都会立即知道所有内容在哪里,并且不会对您的文件去向有任何疑问。

      【讨论】:

        【解决方案5】:

        Maven 想要资源文件夹中的此类信息。请参阅here 了解更多信息。

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

        有关指定其他资源目录,请参阅here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-06
          • 2016-12-14
          • 1970-01-01
          • 2023-01-11
          • 2014-05-26
          • 2021-08-10
          • 2015-12-29
          • 2016-09-12
          相关资源
          最近更新 更多