web-dev-qa-db-ja.com

Eclipseでpom.xmlを検証するときのFailOnMissingWebXmlエラー

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 Version:Mars.1 Release(4.5.1))。

UPDATE1:Eclipseでプロジェクトを更新しようとしましたが、違いはありませんでした。

UPDATE2:パッケージタイプをwarからpomに変更してみましたが、違いはありませんでした。

6
Peter G.

Mavenのすべてはプラグインを中心に展開します。プラグインは、ビルドプロセス内でいくつかの動作を実行するプログラムです。一部のプラグインのインクルードは、何も宣言する必要がないことを意味しています。

これらの暗黙のデフォルト設定があります。たとえば、maven-compiler-pluginは、宣言せずにすべてのプロジェクトに含まれています。デフォルトの構成をオーバーライドするには、out pom.xmlファイルでプラグインを宣言し、構成を設定する必要があります。たとえば、多くのプロジェクトでは、sourcetargetがJava 1.5。に設定されているmaven-compiler-pluginのデフォルトをオーバーライドしています。 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>

これは、プラグインの背後にある理論であり、何が起こっているのかを理解させるためのものです。

そうは言っても、<packaging>war<packaging>を使用するために、何も宣言しなくてもmaven-war-pluginが使用されます。 <packaging>jar</packaging>を使用する場合と同様に、maven-jar-pluginが含まれていることを意味します。

maven-war-pluginのデフォルト構成は、web.xmlがない場合の失敗です(その構成プロパティはfailOnMissingWebXmlです)。したがって、このデフォルトをオーバーライドする場合は、プラグインを宣言してから、プロパティの値をfalse(失敗しない)に設定する必要があります

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>    
            </configuration>
        </plugin>
    </plugins>
</build>

更新

コンパイラプラグインで、ルックアップするプロパティを使用できるようになりました。これにより、プラグインをオーバーライドすることなく、プロパティを簡単に宣言できます。このプロパティを追加するには、プロパティfailOnMissingWebXmlに値falseをプロジェクト<properties>に追加するだけです。

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

これを追加するだけで、コンパイラプラグインに追加する必要がある構成がない場合、pomでコンパイラプラグインをオーバーライドして宣言する必要がなくなります。

17
Paul Samsotha
  1. 行う:

    mvn clean Eclipse:clean
    
  2. これをPOMに追加します。

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

以下のプロパティをPOM.xmlに追加

 <failOnMissingWebXml>false</failOnMissingWebXml>

Warプラグインのバージョン3を選択するのが最も簡単な方法だと思います。failOnMissingWebXmlのdefault値がtrueからfalseに変更されました。

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

Pomに設定すると、厄介なエラーは永遠に消えます。

0

以下のようにこのプロパティをPOM.xmlに追加することで、この問題を解決できました。

<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
0
Ragu Venkatesan