Maven의 "webxml 속성이 필요합니다"오류


318

다음과 같은 오류가 발생합니다.

WAR 조립 오류 : webxml 속성이 필요합니다 (또는 업데이트 모드에서 실행중인 경우 기존 WEB-INF / web.xml).

나는 web.xml바로 이곳에 도착 했다projectname\src\main\webapp\WEB-INF\web.xml

이 문제의 원인은 무엇입니까?


1
포장지가 치열한 전쟁을 벌이도록 설정되어 있습니까?
crowne

나는 같은 문제에 직면하고 플러그인 버전을 업데이트하면 해결되었습니다.
TechnocratSid

답변:


359

maven-war-plugin의 코드 스 니펫을 제공 할 수 있다면 도움이 될 것입니다. 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
고맙습니다. 그러나 Maven이 검색하는 기본 위치는 무엇입니까?
버팔로

5
방금 maven war 플러그인을 2.1.1에서 2.4로 업데이트했으며 기본 위치를 명시 적으로 지정해야합니다.
xverges

2
ItelliJ IDEA 사용자에 대한 답변을 업데이트하고 싶을 수도 있습니다. IntelliJ는 <webXml> web \ WEB-INF \ web.xml </ webXml>이되도록 다른 프로젝트 구조를 만듭니다.
Vic Torious

귀하의 답변을 시도했지만 여전히 "C : \ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF"하고 그 대신에 동일한 오류가 발생했습니다. 나는 무엇이 문제인지 모른다. 내 행운이야 감사합니다
토끼 조엘

1
잘 했어! Thx :)
yanike 2018

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

이 솔루션은 저에게 효과적입니다 (이전에 2.2를 사용하고있었습니다). 또한 Servlet 3.0에 Java 기반 구성을 사용하고 있으며 web.xml 파일이 필요하지 않습니다.


해당 플러그인의 버전 3.x는 이제 failOnMissingWebXml의 기본값을로 설정합니다 false. 따라서 <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> 충분합니다.
Eisenknurr 2016 년

내가있는 동안 여전히 일하고 jboss-web.xml을 사용하고 있습니다-감사합니다!
JGlass

web.xml이없는 프로젝트가 있는데 이것은 나를 위해 일했습니다. 메이븐 빌드가 성공했습니다.
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이 들어있는 폴더 일 때 작동합니다.
Ram

32

이것은 웹 프로젝트에 web.xml을 포함시키지 않았고 maven을 사용하여 전쟁을 일으키려고하기 때문입니다. 이 오류를 해결하려면 pom.xml 파일에서 failOnMissingWebXmlfalse 로 설정해야 합니다.

예를 들면 다음과 같습니다.

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

자세한 내용은 블로그를 참조하십시오 : https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html


23

XML 기반에서 Java 기반 구성으로 마이그레이션하고 WebApplicationInitializer를 구현하여 web.xml이 필요하지 않은 경우, web.xml 파일이 필요하지 않아도됩니다.

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

비슷한 답변이 전에 제공되었습니다
Paul Verest

이것은 정확히 라인이 필요한 컨텍스트를 제공합니다.

20

작동하려면 webXml 태그의 값이 다음과 같아야합니다.

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

바로 그거죠! 처음에 슬래시 <warSourceDirectory>\src\main\webapp</warSourceDirectory>가 작동하지 않는 것을 볼 때까지 알아낼 수 없었습니다 ! v2.6에 없음
Adam

19

나는 똑같은 문제가 있었고 이것을 다음과 같이 해결했다.

WEB-INF아래에 이름이 지정된 새 폴더를 만듭니다.src/main/webbapp

당신의 오른쪽 클릭 프로젝트-> Java EE 도구-> 배치 디스크립터 스텁 생성을

이것은 당신을 생성해야합니다 web.xml

나는 이것이 당신의 문제를 해결함으로써 도움이되기를 바랍니다 : D


13

올바른 위치에 web.xml이있는 것처럼 보이지만이 오류는 종종 Maven이 예상하는 것과 일치하지 않는 디렉토리 구조로 인해 발생합니다. 예를 들어 Maven으로 빌드하려는 Eclipse 웹 애플리케이션으로 시작하는 경우.

그것이 문제라면, 빠른 수정은 a
src/main/java와 a 를 만드는 것입니다 .
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 파일이 누락 된 경우 빌드 실패 여부입니다. web.xml 파일없이 WAR을 빌드하려면 false로 설정하십시오. 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

어윈 버 하르트와 같습니다. WEB-INF\web.xml already added, skipping
Prachi

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. 상황에 맞는 메뉴에서 "Open Module Settings"를 선택한 다음 +를 클릭하여 웹 배포 설명자를 추가합니다. 배치 디스크립터 생성
  3. 그런 다음 설명자 또는 웹 리소스 디렉토리 와 오른쪽 의 경로를 변경할 수 있습니다 .
  4. 그럼 당신은 다음과 같은 것을 얻을 것입니다 : 프로젝트 구조

1
netbeans에서 : 프로젝트 노드> 새로 작성> 기타> 웹> 표준 배치 디스크립터 (web.xml)를 마우스 오른쪽 단추로 클릭하십시오.
초라한

2

pom.xml이 프로젝트 폴더에 올바르게 배치되어 있는지 확인하십시오. 대상 폴더 내부 또는 다른 곳에는 없습니다.

pom.xml이 상대적으로 정렬되지 않은 것 같습니다.


2

파일이 더 이상 /src/main/webapp/WEB-INF/web.xml에 있도록 폴더 구조가 변경 되었습니까 ?

이 문제를 해결하기 위해 웹 폴더에 webapp라는 이름을 지정하고 src / main 안에 배치했습니다. Maven은 기본적으로 /src/main/webapp/WEB-INF/web.xml 에서 web.xml을 찾는 것 같습니다 . 이렇게하면 web.xml이 어디에 있는지 maven에 명시 적으로 말할 필요가 없습니다. 폴더 구조를 변경하고 빌드가 최근에 작동을 멈춘 경우 이것이 바로 그 이유 일 수 있습니다.

참고 : 이것은 오래된 게시물이지만 게시 된 솔루션은 왜 작업 빌드가 갑자기 작동을 멈출지를 지적하지 않습니다.


2

많은 답변이 있으며 대부분이 효과가 있지만 더 중요하지 않은 점을 하나 더 추가하겠습니다.
로그 메시지에 따르면을 사용하고 maven있습니다. Maven은 일부 규칙을 기반으로하는 프로젝트 관리 빌드 도구입니다. 프로젝트를 빌드하고 적절한 디렉토리 구조를 작성하며 파일 Sun Microsystems Directory Structure Standard을 Java EE / Web 애플리케이션을 준수하는 해당 디렉토리에 배치합니다 .

maven 플러그인, 프로젝트 루트 디렉토리 변경 / 재구성 등을 포함하여 많은 것을 통합 할 수 있지만 간단한 단계가 하나 있으며 프로젝트는 괜찮습니다. 당신의 web.xml아래에 배치 src\main\webapp\WEB-INF\하고 프로젝트를 구축하려고mvn package .

이것이이 문제에 약간 더 가벼워지기를 바랍니다.


1

당신이에 pakage 파일 메이븐에게 전하고 때문에이 오류가 발생 전쟁 .

<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 응용 프로그램으로 별도로 실행되지 않으므로 전쟁이 필요하다고 생각합니다.
Giorgi Tsiklauri

1

🔴 2020 년 이후 failOnMissingWebXml

maven-war-plugin에서 사용하는 기본값이 변경 되었기 때문에 다른 모든 대답은 더 이상 사용되지 않을 수 있습니다 .

3.1.0부터 프로젝트가 Servlet 3.0 API 이상에 의존하는 경우이 특성의 기본값은 false입니다.

그래서 당신이해야 할 유일한 것은 추가하는 것입니다

<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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.