Erro "atributo webxml é obrigatório" no Maven

318

Eu estou recebendo o seguinte erro:

Erro ao montar o atributo WAR: webxml é necessário (ou WEB-INF / web.xml pré-existente se estiver sendo executado no modo de atualização)

Eu cheguei web.xmlno lugar certo, que éprojectname\src\main\webapp\WEB-INF\web.xml

O que poderia estar causando isso?

user617966
fonte
1
sua embalagem está pronta para a guerra?
crowne
Eu estava enfrentando o mesmo problema e a atualização da versão do plug-in resolveu o problema.
precisa

Respostas:

359

Seria útil se você pudesse fornecer um trecho de código do seu plugin maven-war-plugin. Parece que web.xmlestá no lugar certo, mas você pode tentar fornecer o local explicitamente

<plugin>            
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>        
  </configuration>
</plugin>
Arpit
fonte
36
Trabalhou para mim também, obrigado. Mas qual é o local padrão em que o Maven pesquisa?
Buffalo
5
Acabei de atualizar o plugin maven war de 2.1.1 para 2.4, e a necessidade de tornar explícito o local padrão desapareceu.
Xverges
2
Você pode querer atualizar sua resposta para os usuários IDEA ItelliJ - IntelliJ cria outra estrutura do projeto de modo que seria <webxml> web \ WEB-INF \ web.xml </ webxml>
Vic Torious
tentei sua resposta, mas ainda recebi o mesmo erro em vez disso, eu fiz isso "C: \ Users \ xxxx \ Videos \ maven-projects \ meu-projeto \ src \ webapp \ WEB-INF" e funcionou bem. Não sei qual é o problema. É a minha sorte. Obrigado
Bunny Joel
1
Trabalhou muito bem! Thx :)
yanike 16/11/19
145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

Esta solução funciona para mim (eu estava usando o 2.2 antes). Além disso, estou usando a configuração baseada em Java para o Servlet 3.0 e não preciso ter o arquivo web.xml.

srv
fonte
As versões 3.x desse plug-in agora têm failOnMissingWebXml como padrão false. Então, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> deve ser suficiente.
Eisenknurr 12/06/19
trabalhou para mim como eu era e ainda estou usando o jboss-web.xml - obrigado!
JGlass
Eu tenho um projeto que não possui web.xml, e isso funcionou para mim. A construção do Maven é bem-sucedida.
blueSky
81

Funciona perfeitamente para mim também.

<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>
Burhan ARAS
fonte
4
Acima funciona quando as facetas estão ativadas e WebContent é a pasta onde entra o web.xml. #
29713 Ram #
32

Isso ocorre porque você não incluiu o web.xml no seu projeto da web e tentou criar guerra usando o maven. Para resolver esse erro, é necessário definir o failOnMissingWebXml como false no arquivo pom.xml.

Por exemplo:

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

Consulte o blog para obter mais detalhes: https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

Ankur jain
fonte
23

Se você estiver migrando da configuração baseada em XML para Java e tiver removido a necessidade de web.xml implementando o WebApplicationInitializer, basta remover o requisito de presença do arquivo web.xml.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>
Beatty
fonte
resposta semelhante foi dada antes
Paul Verest 01/07/16
Este fornece contexto, onde exatamente a linha precisa ir.
foo
20

O valor da minha tag webXml precisava ficar assim para funcionar:

<webXml>${project.basedir}\src\main\webapp\WEB-INF\web.xml</webXml> 
BoneGoat
fonte
exatamente! Não consegui descobrir até que vi que tinha apenas uma barra no começo <warSourceDirectory>\src\main\webapp</warSourceDirectory>não funciona! Não na v2.6
Adam
19

Eu tive exatamente o mesmo problema e resolvi-o assim:

Faça uma nova pasta chamada WEB-INFem src/main/webbappseguida,

Clique com o botão direito do mouse em seu Projeto -> Ferramentas Java EE -> Gerar Stub do Descritor de Implementação

Isso deve gerar seu web.xml

Espero que isso ajude resolvendo seu problema: D

Catalin Ciolocoiu
fonte
13

Parece que você tem o web.xml no local certo, mas mesmo assim, esse erro geralmente é causado pela estrutura de diretórios que não corresponde ao que o Maven espera ver. Por exemplo, se você iniciar com um aplicativo da web Eclipse que estiver tentando construir com o Maven.

Se for esse o problema, uma solução rápida é criar um
src/main/javae um
src/main/webappdiretório (e outros diretórios se você precisar deles) e apenas mover seus arquivos.

Aqui está uma visão geral do layout do diretório maven: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

MattC
fonte
6

Se você alterar o caminho do projeto padrão, deverá especificar o local do arquivo web.xml, por exemplo:

        <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>
johnander11
fonte
6

Conforme a documentação, ele diz: Se falhará ou não na compilação se o arquivo web.xml estiver ausente. Configure como false se desejar que o WAR seja construído sem um arquivo web.xml. Isso pode ser útil se você estiver criando uma sobreposição que não possui arquivo web.xml. O valor padrão é: true. A propriedade do usuário é: failOnMissingWebXml.

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

Espero que fique mais claro

codechefvaibhavkashyap
fonte
5

Também funcionou para mim.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
Vineet kaushik
fonte
Ele funciona, mas os logs diz agora: WEB-INF\web.xml already added, skipping. É estranho, quando não adiciono isso, recebi o erro.
erwineberhard
O mesmo que erwineberhard. WEB-INF\web.xml already added, skipping
Pray
4

O mvn-war-plugin 2.3 corrige isso:

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

Eu tive o mesmo erro no servidor de teste, mas não no local. Após alguns minutos, descobri que o IDE não estava sincronizado com o pom.xml. Aqui está como eu resolvo isso:

Gere novamente o descritor de implementação com o Eclipse

  1. Clique com o botão direito na pasta do seu projeto
  2. No menu contextual, escolha "Java EE Tools" e "Gerar stub do descritor de implantação" Gere web.xml
  3. Ele criará o web.xml. web.xml na estrutura do projeto

Gere novamente o descritor de implantação com o IntelliJ

  1. Clique com o botão direito na pasta do seu projeto
  2. No menu contextual, escolha "Abrir configurações do módulo" e clique no + para adicionar o descritor de implementação da web. Gere o descritor de implementação
  3. Em seguida, você pode alterar o caminho para o seu descritor ou os diretórios de recursos da Web e o lado direito.
  4. Então você terá algo como: Estrutura do projeto
KeyMaker00
fonte
1
e no netbeans você: clique com o botão direito do mouse no nó do projeto> Novo> Outro> Web> Descritor de Implementação Padrão (web.xml).
gasto
2

Verifique se o pom.xml está colocado corretamente na pasta Projeto. e não dentro da pasta de destino ou em qualquer outro lugar.

Parece que pom.xml não está relativamente alinhado.

Meghashyam
fonte
2

Sua estrutura de pastas foi alterada para que o arquivo não esteja mais em /src/main/webapp/WEB-INF/web.xml ?

Para resolver esse problema, dei à minha pasta da web o nome webapp e coloquei dentro do src / main. O Maven parece procurar por web.xml por padrão em /src/main/webapp/WEB-INF/web.xml . Se você fizer isso, não precisará informar explicitamente ao maven onde está o web.xml. E se você alterou sua estrutura de pastas e sua compilação parou de funcionar recentemente, talvez seja por isso.

Nota: Esta é uma postagem antiga, mas as soluções publicadas não apontam por que uma construção em funcionamento para de funcionar repentinamente.

Usman Mutawakil
fonte
2

Existem muitas respostas e a maioria delas funcionará, mas vou acrescentar mais um ponto que, penso eu, não tem menos importância.
De acordo com a sua mensagem de log, você está usando maven. O Maven é uma ferramenta de criação de gerenciamento de projetos, baseada em algumas convenções. Ele cria o projeto, cria uma estrutura de diretórios adequada e coloca os arquivos nos diretórios correspondentes, compatíveis com Sun Microsystems Directory Structure Standardaplicativos Java EE / Web.

Você pode incorporar muitas coisas, incluindo plugins maven, alterando / reconfigurando o diretório raiz do projeto, etc., mas há uma etapa simples que você pode executar e seu projeto deve estar bem. Basta colocar o seu web.xmlunder src\main\webapp\WEB-INF\e tentar construir o projeto com mvn package.

Espero que isso adicione um pouco mais de luz a esse problema.

Giorgi Tsiklauri
fonte
1

Este erro ocorre porque você diz ao Maven para pakage os arquivos para a guerra .

<packaging>war</packaging>

Você realmente precisa de guerra? Caso contrário, coloque o frasco lá. Aqui está o código completo:

<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>
Yuliia Ashomok
fonte
jar e guerra são histórias completamente diferentes. Acho que a guerra é necessária aqui, pois o arquivo está sendo implantado no contêiner da web e não é executado separadamente como um aplicativo jar independente.
Giorgi Tsiklauri
1

🔴 failOnMissingWebXml desde 2020

Todas as outras respostas sobre podem estar obsoletas porque o valor padrão usado pelo maven-war-plugin mudou :

A partir do 3.1.0, essa propriedade assume como padrão false se o projeto depender da API do Servlet 3.0 ou mais recente.

Então, a única coisa que você precisa fazer é adicionar

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

Exemplo:

<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>
Sombrio
fonte