【问题标题】:FailOnMissingWebXml error when validating pom.xml in Eclipse在 Eclipse 中验证 pom.xml 时出现 FailOnMissingWebXml 错误
【发布时间】:2016-02-05 10:25:43
【问题描述】:

编译 Maven 项目时,我在 pom.xml 的验证阶段收到此错误。这是一个相当大的项目,具有复杂的构建过程。该项目仅包含 JavaScript 代码,不必编译成 war。我正在寻找一种方法:

  • 只需通过禁用failOnMissingWebXml 来禁用错误(它似乎是一个非关键的 Eclipse 错误)
  • 在 Eclipse 中找到防止此验证错误的解决方案(相关问题的答案) 问题不适用于我的具体情况)

完整的错误:

Description Resource    Path    Location    Type web.xml is missing 
and <failOnMissingWebXml> is set to true    pom.xml /testproject    line 6    
Maven Java EE Configuration Problem

点击错误后问题似乎出在pom.xml这一行:

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.scs</groupId>
  <artifactId>scs-control-panel</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging> **THE ERROR POINTS TO THIS LINE**

  <parent>
    <groupId>com.scs</groupId>
    <artifactId>scs</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../scs</relativePath>
  </parent>

  <build>
  </build>

  <dependencies>
  </dependencies>

</project>

不确定这是 Eclipse 还是 Maven 错误,但可能是 Eclipse,因为 Maven 通过命令行可以顺利运行。它也可能是 Eclipse 中的一个错误,我正在运行 Eclipse Java EE IDE for Web Developers 版本:Mars.1 Release (4.5.1)。

UPDATE1:我尝试在 Eclipse 中更新项目,但没有区别。

UPDATE2:我尝试将包类型从war 更改为pom,但没有区别。

【问题讨论】:

  • 我相信这是重复的:请看这两个链接:Maven - Solved - web.xml not found in Java EE7 projectEclipse - web.xml is missing
  • 能否提供完整的pom.xml
  • 这两个建议的答案都没有解决我的问题。删除 .metada .project .settings .classpath。除此之外还造成了更多的错误。现在附上完整的pom.xml。我尝试在 Eclipse 中更新项目,但没有区别。
  • 实际上是(第一个)链接中的 question(不回答)有解决方案。将maven-war-plugin 添加到您的pom 中,在&lt;build&gt;&lt;plugins&gt;{here}&lt;/plugins&gt;&lt;/build&gt;

标签: eclipse maven jakarta-ee war pom.xml


【解决方案1】:

Maven 中的一切都围绕插件展开。插件是在构建过程中执行某些行为的程序。一些插件包含是隐含的,我们不必声明任何东西。

这些隐含的插件具有默认配置。例如,maven-compiler-plugin 包含在所有项目中,无需声明它。要覆盖默认配置,我们需要在 pom.xml 文件中声明插件并设置配置。例如,您会看到很多项目覆盖了maven-compiler-plugin 上的默认版本,其中sourcetarget 设置为Java 1.5。我们可以改成1.8

<build>
  <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.1</version>
          <configuration>
              <source>1.8</source>
              <target>1.8</target>
          </configuration>
      </plugin>
  </plugins>
</build>

这只是插件背后的一些理论,让您了解正在发生的事情。

话虽如此,为了使用&lt;packaging&gt;war&lt;packaging&gt;maven-war-plugin 的使用无需我们声明任何内容。就像使用 &lt;packaging&gt;jar&lt;/packaging&gt; 时一样,隐含了 maven-jar-plugin 的包含。

maven-war-plugin 的默认配置是在没有web.xml 的情况下失败(该配置属性为failOnMissingWebXml)。所以如果我们想覆盖这个默认值,我们需要声明插件,然后将属性的值设置为false(不失败)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>    
            </configuration>
        </plugin>
    </plugins>
</build>

更新

war 插件现在允许您只使用它将查找的属性。这使您可以简单地声明属性而无需覆盖插件。要添加此属性,您只需将值为 false 的属性 failOnMissingWebXml 添加到项目 &lt;properties&gt;

<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

只需添加这个,如果您没有需要添加到编译器插件的进一步配置,您将不再需要在 pom 中覆盖和声明编译器插件。


更新 2

因此,如果您声明 maven-war-plugin 并使用 &lt;version&gt; 3.0.0+,则 no web.xml 失败的默认值将设置为 false,因此我们不再需要覆盖配置属性,尽管我们仍然需要声明插件。

【讨论】:

  • 这似乎解决了问题 - 我必须再次检查您的答案。这也可能是最新版本的 Eclipse (Mars) 的问题,因为检查似乎不会导致旧版本 (Luna) 出现错误
【解决方案2】:
  1. 做:

    mvn clean eclipse:clean
    
  2. 将此添加到您的 POM:

    <packaging>war</packaging>
    <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>
    

【讨论】:

    【解决方案3】:

    将以下属性添加到 POM.xml

     <failOnMissingWebXml>false</failOnMissingWebXml>
    

    【讨论】:

      【解决方案4】:

      我想最简单的方法是选择战争插件版本 3。failOnMissingWebXml 的 default 值已从 true 更改为 false .

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.0.0</version>
      </plugin>
      

      一旦在你的 pom 中设置,讨厌的错误就会永远消失。

      【讨论】:

        【解决方案5】:

        我可以通过在 POM.xml 中添加这个属性来解决这个问题,如下所示。

        <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        </properties>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-21
          • 2020-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多