Атрибут webxml требуется с Servlet 3.0

Я получаю эту ошибку при попытке скомпилировать 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, но в «Книге Ваадина» говорится, что web.xml не нужен при использовании Servlet API 3.0 и аннотации @WebServlet в вашем пользовательском интерфейсе класс.

Я собираю свои наборы виджетов в отдельный профиль (согласно это руководство), и он отлично компилируется, когда я использую этот профиль. Однако, когда я компилирую только веб-проект, я получаю указанную выше ошибку.

Что дает?

Могу ли я как-то переопределить поведение maven? Ваадин даже не создал каталог WEB-INF. Думаю, я мог бы создать папку WEB-INF и сохранить там «призрак» web.xml, чтобы maven был доволен, но это не кажется правильным.

Я что-то упускаю?

Кто-нибудь знает хорошее решение этого?


person Roger    schedule 12.08.2013    source источник


Ответы (4)


По умолчанию maven-war-plugin не сможет найти web.xml, см. здесь. Если вы создаете проект 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 и определите там сервлет, подробные инструкции см. В Книге Ваадина.

person Sergey Makarov    schedule 12.08.2013
comment
Я только что нашел. =) На самом деле у меня в компиляции виджетов был failOnMissingWebXml. Спасибо - person Roger; 12.08.2013
comment
Мне нужно было добавить ‹version› 2.4 ‹/version› в плагин, чтобы избавиться от всех моих предупреждений. - person Jon; 19.04.2014
comment
Обратите внимание, что вы можете сделать это немного более лаконично, просто добавив <failOnMissingWebXml>false</failOnMissingWebXml> в свой <properties> раздел. - person Dan Passaro; 28.06.2015
comment
просто включил фрагмент кода в web.xml из приведенного выше фрагмента кода, как это было предложено @Sergey Makarov, это решило проблему. Большое спасибо. Сэкономил там 20 минут. ‹Plugin› ‹groupId› org.apache.maven.plugins ‹/groupId› ‹artifactId› maven-war-plugin ‹/artifactId› ‹configuration› ‹failOnMissingWebXml› false/failOnMissingWebXml› ‹››/configuration ‹/plugin - person Ajay; 02.09.2016

Я приземлился здесь с аналогичной ошибкой, но использовал Eclise Luna (4.4) с Maven 3.0

В итоге я сделал это:

  1. переместите WebContent \ WEB-INF \ web.xml в src \ 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

person Mauricio Gracia Gutierrez    schedule 03.06.2015
comment
Я думаю, это решение может быть действительно хорошим, если вам действительно нужно использовать web.xml в какой-либо другой части того же проекта. - person Roger; 05.06.2015

Начиная с версии 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 был параметр _8 _ по умолчанию установлено true, что вызывает вашу проблему. См. ответ Сергея Макарова о том, как вручную установить для параметра значение false, если вам нужно использовать старую версию плагина.

person siegi    schedule 22.10.2016

Возможно, вы не следуете стандартному макету каталога maven, как описано здесь макет каталога Maven

person ACV    schedule 28.05.2015