web-dev-qa-db-ja.com

サーブレット3.0ではwebxml属性が必要です

Vaadin WARをコンパイルしようとすると、次のエラーが表示されます。

Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project testvaadin-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

このエラーは、Mavenがweb.xmlを見つけられないことを意味しますが、 "Book of Vaadin"ではweb.xmlは必要ないサーブレットAPI 3.0と注釈@WebServletあなたのUIクラス。

ウィジェットセットを別のプロファイルでコンパイルしています( this ガイドに従って)。このプロファイルをrnuすると正常にコンパイルされます。ただし、Webプロジェクトのみをコンパイルすると、上記のエラーが発生します。

何が得られますか?

どうにかしてMavenの動作をオーバーライドできますか? VaadinはWEB-INFディレクトリも作成しませんでした。 WEB-INFフォルダーを作成し、そこに「ゴースト」web.xmlを保持してMavenを幸せにできると思いますが、それは正しくないようです。

何か不足していますか?

誰かがこれに対する良い解決策を知っていますか?

49
Roger

デフォルトでは、web.xmlが見つからない場合、maven-war-pluginは失敗します。 here を参照してください。最新のアーキタイプを使用してMavenプロジェクトを作成している場合、このパラメーターはfalseに設定されます。

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

注釈の代わりにweb.xmlを使用する場合は、WEB-INF/web.xmlを作成して、そこにサーブレットを定義するだけです。詳細な手順については、Book of Vaadinを参照してください。

108
Sergey Makarov

同様のエラーでここに着陸しましたが、Maven 3.0でEclise Luna(4.4)を使用しました

私はこれをやった:

  1. WebContent\WEB-INF\web.xmlsrc\main\webapp\WEB-INF\webに移動します.xml

  2. 使用 <webXml>はweb.xmlの場所を指定します

<build>
      <plugins>
          <plugin>
              <groupId>org.Apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.0</version>
              <configuration>
                  <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
              </configuration>
          </plugin>
      </plugins>
      <!-- we dont want the version to be part of the generated war file name -->
      <finalName>${project.artifactId}</finalName>
  </build>
  1. mvn packageを実行し、ビルド成功を確認します(WARの場合)

この前に、web.xmlファイルの元のパスを使用してみました

<webXml>WebContent\WEB-INF\web.xml</webXml>

しかし、Mavenは取り上げなかったため、Mavenフォルダー構造に従うのが最善です

http://maven.Apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

バージョン3.0.0以降、 maven-war-plugin は、web.xmlなしでそのまま動作します。

少なくともMavenバージョン3.3.9までは、パッケージングwarは古いバージョンのmaven-war-plugin にバインドされるため、明示的に設定する必要があります。 pom.xmlのバージョン:

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

maven-war-pluginの以前のバージョンでは、パラメーター failOnMissingWebXml がデフォルトでtrueに設定されていました。これが問題の原因です。プラグインの古いバージョンを使用する必要がある場合、パラメータを手動でfalseに設定する方法については、 Sergey Makarovsの回答 を参照してください。

1
siegi

ここで説明されている標準のMavenディレクトリレイアウトに従っていない可能性があります Mavenディレクトリレイアウト

0
ACV