Помилка "атрибут webxml необхідна" в Maven


318

Я отримую таку помилку:

Помилка при складанні WAR: атрибут webxml потрібен (або попередньо існуючий WEB-INF / web.xml, якщо виконується в режимі оновлення)

Я потрапив web.xmlу потрібне місце, яке єprojectname\src\main\webapp\WEB-INF\web.xml

Що може бути причиною цього?


1
ваша упаковка налаштована на війну в пом?
корона

Я зіткнувся з тією ж проблемою, і оновлення версії плагіна вирішило її.
TechnocratSid

Відповіді:


359

Було б корисно, якщо ви можете надати фрагмент коду свого додатка Maven-war. Схоже, web.xmlце місце у потрібному місці, ви все ж можете спробувати вказати місце розташування прямо

<plugin>            
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>        
  </configuration>
</plugin>

36
Працював і для мене, дякую. Але яке місце за замовчуванням там, де Мейвен здійснює пошук?
Буффало

5
Я щойно оновив плагін Maven war з 2.1.1 до 2.4, і потрібно чітко вказати місце розташування за замовчуванням.
xverges

2
Ви можете оновити свою відповідь для користувачів ItelliJ IDEA - IntelliJ створює іншу структуру проекту, щоб це було <webXml> web \ WEB-INF \ web.xml </webXml>
Вік Торріоз

спробував вашу відповідь, але все-таки отримав ту саму помилку замість того, що я зробив це "C: \ Користувачі \ xxxx \ Відео \ maven-projects \ my-project \ src \ webapp \ WEB-INF" і працював добре. Я не знаю, в чому проблема. Моя удача. Дякую
Зайчик Джоель

1
Працювали чудово! Thx :)
yanike

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

Це рішення працює для мене (я раніше використовував 2.2). Крім того, я використовую Java-конфігурацію для Servlet 3.0 і не потрібно мати файл web.xml.


Версії 3.x цього плагіна тепер мають за замовчуванням failOnMissingWebXml false. Отже, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> повинно вистачити
Айзенкнурр

працював для мене, як я був, і досі використовую jboss-web.xml - дякую!
JGlass

У мене є проект, який не має web.xml, і це працювало для мене. Збірка Maven проходить успішно.
blueSky

81

Це прекрасно працює і для мене.

<project>

.....

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webXml>WebContent\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4
Вище працює, коли ввімкнено грані, а WebContent - папка, в яку переходить web.xml.
Рам,

32

Це тому, що ви не включили web.xml у свій веб-проект і намагаєтесь побудувати війну за допомогою Maven. Щоб вирішити цю помилку, потрібно встановити файл falseOnMissingWebXml на помилковий у файлі pom.xml.

Наприклад:

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

Будь ласка, перегляньте блог для отримання більш детальної інформації: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html


23

Якщо ви переходите з конфігурації, заснованої на XML, на Java, і ви усунули потребу в web.xml, застосувавши WebApplicationInitializer, просто видаліть вимогу щодо наявності файлу web.xml.

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

аналогічна відповідь була дана раніше
Пол Верест

Це дає контекст, куди саме потрібно пройти лінію.
foo

20

Значення мого тегу webXml потрібно для того, щоб виглядати так, щоб працювати:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 

точно! Я не міг зрозуміти це, поки я не побачив, що у мене просто коса риса на початку <warSourceDirectory>\src\main\webapp</warSourceDirectory>не працює! Не в v2.6
Адам

19

У мене була точно така ж проблема, і я вирішив її так:

Створіть нову папку, названу WEB-INFпід src/main/webbappтоді

Клацніть правою кнопкою миші на вашому проекті -> Інструменти Java EE -> Створити дескриптор заглушки розгортання

Це має генерувати ваше web.xml

Я сподіваюся, що це допомагає вирішити вашу проблему: D


13

Схоже, у вас розміщено web.xml у потрібному місці, але навіть так, ця помилка часто викликана тим, що структура каталогу не відповідає тому, що Maven очікує бачити. Наприклад, якщо ви починаєте з веб-сторінки Eclipse, яку ви намагаєтеся створити з Maven.

Якщо це питання, швидке рішення полягає в створенні
src/main/javaі в
src/main/webappкаталог (і інші каталоги , якщо вони вам потрібні) і просто переміщати файли.

Ось огляд макета каталогу Maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html


6

Якщо ви змінили шлях до проекту за замовчуванням, потрібно вказати розташування файлу web.xml, наприклад:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <webXml>src\main\web\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>

6

Згідно з документацією, вказується: Збій чи збій у збірці, якщо файл web.xml відсутній. Встановіть значення false, якщо ви хочете, щоб у вас створено WAR без файлу web.xml. Це може бути корисно, якщо ви будуєте накладку, яка не має файлу web.xml. Значення за замовчуванням: true. Властивість користувача: failOnMissingWebXml.

<plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <extensions>false</extensions>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>            </plugin>

Сподіваюсь, це стане більш зрозумілим


5

Це працювало і для мене.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>

Він працює, але журнали тепер каже: WEB-INF\web.xml already added, skipping. Це дивно, коли я не додаю цього, я отримав помилку.
erwineberhard

Те саме, що і Erwineberhard. WEB-INF\web.xml already added, skipping
Прачі

4

mvn-war-plugin 2.3 виправляє це:

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

4

У мене була така ж помилка на тестовому сервері, але не на локальному. Через кілька хвилин я виявив, що IDE не синхронізується з pom.xml. Ось як я це вирішую:

Повторно генеруйте дескриптор розгортання за допомогою Eclipse

  1. Клацніть правою кнопкою миші на папці вашого проекту
  2. У контекстному меню виберіть "Інструменти Java EE", а потім "Створити опис програми дескрипції розгортання" Створити web.xml
  3. Це створить web.xml. web.xml у структурі проекту

Повторно генеруйте дескриптор розгортання за допомогою IntelliJ

  1. Клацніть правою кнопкою миші на папці вашого проекту
  2. У контекстному меню виберіть "Відкрити налаштування модуля", потім натисніть кнопку +, щоб додати дескриптор веб-розгортання. Створіть дескриптор розгортання
  3. Тоді ви можете змінити шлях до свого дескриптора або до Каталогів веб-ресурсів та до правого боку.
  4. Тоді ви отримаєте щось на кшталт: Структура проекту

1
а в netbeans ви: клацніть правою кнопкою миші проектний вузол> Новий> Інше> Веб> Стандартний дескриптор розгортання (web.xml).
пошарпаний

2

Переконайтесь, що pom.xml розміщений належним чином у папці Project. а не всередині цільової папки або будь-якого іншого місця.

Схоже, pom.xml не є відносно вирівняним.


2

Чи була змінена структура вашої папки, щоб файл більше не перейшов на /src/main/webapp/WEB-INF/web.xml ?

Щоб вирішити цю проблему, я дав своїй веб-папці ім'я webapp і помістив її всередині src / main. Здається, Maven шукає web.xml за замовчуванням за адресою /src/main/webapp/WEB-INF/web.xml . Якщо ви це зробите, то вам не потрібно чітко повідомляти maven, де web.xml. І якщо ви змінили структуру вашої папки, і ваша збірка нещодавно перестала працювати, це може бути причиною.

Примітка. Це старе повідомлення, але опубліковані рішення не вказують, чому робоча збірка раптом перестане працювати.


2

Відповідей багато, і більшість з них спрацює, але я додам ще один момент, який, я думаю, має не меншу важливість.
Відповідно до вашого журналу, який ви використовуєте maven. Maven - це інструмент для створення проектів для управління проектами, який базується на деяких конвенціях. Він будує проект, створює належну структуру каталогів та розміщує файли у відповідних каталогах, сумісних з Sun Microsystems Directory Structure StandardJava-програмами EE / Web.

Ви можете включити багато речей, зокрема плагіни Maven, зміну / перенастроювання кореневого каталогу проекту тощо, але ви можете зробити один простий крок, і ваш проект повинен бути добре. Просто помістіть web.xmlUnder src\main\webapp\WEB-INF\і спробувати побудувати проект з mvn package.

Я сподіваюся, що це додасть трохи більше світла цій проблемі.


1

Ця помилка виникає через те, що ви повідомляєте Maven, щоб запакувати файли на війну .

<packaging>war</packaging>

Вам справді потрібна війна? Якщо ні, поставте туди банку. Ось повний код:

<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>
    <version>1.0-SNAPSHOT</version>

    <groupId>com.your.groupid</groupId>
    <artifactId>artifactid</artifactId>
    <packaging>jar</packaging>

jar і війна - це зовсім різні історії. Я думаю, що тут потрібна війна, оскільки архів розміщується в веб-контейнері і не запускається окремо як окремий додаток.
Джорджі Циклаурі

1

FailOnMissingWebXml з 2020 року

Усі інші відповіді щодо програми можуть бути застарілими, оскільки значення за замовчуванням, яке використовує плагін maven-war, змінилося :

Починаючи з 3.1.0, ця властивість переходить до значення false, якщо проект залежить від API Servlet 3.0 або новішого.

Отже, ТІЛЬКО, що вам потрібно зробити, - це додати

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

Приклад:

<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>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <tomcat.ignorePackaging>true</tomcat.ignorePackaging>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.