Thuộc tính webxml được yêu cầu Lỗi lỗi trong Maven


318

Tôi nhận được lỗi sau:

Lỗi khi lắp ráp WAR: thuộc tính webxml là bắt buộc (hoặc WEB-INF / web.xml tồn tại trước nếu thực thi trong chế độ cập nhật)

Tôi đã đến web.xmlđúng nơiprojectname\src\main\webapp\WEB-INF\web.xml

Điều gì có thể gây ra điều này?


1
bao bì của bạn được thiết lập để chiến tranh trong pom?
vương miện

Tôi đã phải đối mặt với cùng một vấn đề và cập nhật phiên bản plugin đã giải quyết nó.
TechnocratSid

Câu trả lời:


359

Sẽ rất hữu ích nếu bạn có thể cung cấp một đoạn mã của plugin maven-war-plugin của bạn. Có vẻ như web.xmlđúng chỗ, bạn vẫn có thể thử và cung cấp vị trí một cách rõ ràng

<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
Làm việc cho tôi quá, cảm ơn. Nhưng vị trí mặc định nơi Maven tìm kiếm là gì?
Trâu

5
Tôi vừa cập nhật plugin maven war từ 2.1.1 lên 2.4 và cần phải xác định rõ vị trí mặc định.
xverges

2
Bạn có thể muốn cập nhật câu trả lời của mình cho người dùng ItelliJ IDEA - IntelliJ tạo một cấu trúc dự án khác để nó trở thành <webXml> web \ WEB-INF \ web.xml </ webXml>
Vic Torious

đã thử câu trả lời của bạn nhưng vẫn gặp lỗi tương tự thay vì tôi đã làm điều này "C: \ Users \ xxxx \ Video \ maven-dự án \ my-project \ src \ webapp \ WEB-INF" và hoạt động tốt. Tôi không biết vấn đề là gì. Đó là may mắn của tôi. Cảm ơn bạn
Bunny Joel

1
Làm việc tuyệt vời! Thx :)
yanike

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

Giải pháp này hiệu quả với tôi (tôi đã sử dụng 2.2 trước đó). Ngoài ra, tôi đang sử dụng Cấu hình dựa trên Java cho Servlet 3.0 và không cần phải có tệp web.xml.


Các phiên bản 3.x của plugin đó hiện có failOnMissingWebXml mặc định false. Vì vậy, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> nên đủ.
Eisenknurr

làm việc cho tôi như tôi đã và vẫn đang sử dụng jboss-web.xml - cảm ơn!
JGlass

Tôi có một dự án không có web.xml và điều này hiệu quả với tôi. Xây dựng Maven là thành công.
blueSky

81

Nó hoạt động hoàn hảo cho tôi quá.

<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
Ở trên hoạt động khi các khía cạnh được kích hoạt và WebContent là thư mục chứa tệp web.xml.
Ram


23

Nếu bạn đang di chuyển từ cấu hình dựa trên XML sang cấu hình dựa trên Java và bạn đã loại bỏ nhu cầu về web.xml bằng cách triển khai WebApplicationInitializer, chỉ cần loại bỏ yêu cầu đối với tệp web.xml.

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

câu trả lời tương tự đã được đưa ra trước đây
Paul Verest

Điều này cung cấp cho bối cảnh, nơi chính xác dòng cần phải đi.
foo

20

Giá trị của thẻ webXml của tôi cần phải trông như thế này để hoạt động:

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

chính xác! Không thể hình dung ra cho đến khi tôi thấy tôi chỉ bị một nhát chém lúc ban đầu <warSourceDirectory>\src\main\webapp</warSourceDirectory>không hoạt động! Không phải trong phiên bản 2.6
Adam

19

Tôi đã có cùng một vấn đề và tôi đã giải quyết nó như thế này:

Tạo một thư mục mới có tên WEB-INFdưới src/main/webbappđó

Nhấp chuột phải vào Dự án của bạn -> Công cụ Java EE -> Tạo sơ khai mô tả triển khai

Điều này sẽ tạo ra của bạn web.xml

Tôi hy vọng điều này sẽ giúp bằng cách giải quyết vấn đề của bạn: D


13

Có vẻ như bạn có web.xml ở đúng vị trí, nhưng ngay cả như vậy, lỗi này thường xảy ra do cấu trúc thư mục không khớp với những gì Maven mong đợi. Ví dụ, nếu bạn bắt đầu với một ứng dụng web Eclipse mà bạn đang cố gắng xây dựng với Maven.

Nếu đó là vấn đề, cách khắc phục nhanh là tạo một
src/main/javavà một
src/main/webappthư mục (và các thư mục khác nếu bạn cần chúng) và chỉ cần di chuyển các tệp của bạn.

Dưới đây là tổng quan về bố cục thư mục maven: http://maven.apache.org/guides/int sinhtion / int sinhtion-to-the-st Chuẩn-directory- layout.html


6

Nếu bạn thay đổi đường dẫn dự án mặc định, bạn phải chỉ định vị trí của tệp web.xml, ví dụ:

        <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

Theo tài liệu này, nó nói: Có hay không việc xây dựng nếu tệp web.xml bị thiếu. Đặt thành false nếu bạn muốn WAR được xây dựng mà không có tệp web.xml. Điều này có thể hữu ích nếu bạn đang xây dựng một lớp phủ không có tệp web.xml. Giá trị mặc định là: true. Tài sản của người dùng là: failOnMissingWebXml.

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

Hy vọng nó làm cho rõ ràng hơn


5

Nó làm việc cho tôi quá.

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

Nó hoạt động, nhưng các bản ghi nói bây giờ : WEB-INF\web.xml already added, skipping. Thật kỳ lạ, khi tôi không thêm cái này, tôi đã gặp lỗi.
erwineberhard

Tương tự như erwineberhard. WEB-INF\web.xml already added, skipping
Prachi

4

mvn-war-plugin 2.3 sửa lỗi này:

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

4

Tôi đã có cùng một lỗi trên máy chủ thử nghiệm nhưng không phải cục bộ. Sau vài phút, tôi phát hiện ra rằng IDE không được đồng bộ hóa với pom.xml. Đây là cách tôi giải quyết nó:

Tạo lại bộ mô tả triển khai với Eclipse

  1. Nhấp chuột phải vào thư mục dự án của bạn
  2. Trong trình đơn ngữ cảnh, chọn "Công cụ Java EE" rồi "Tạo sơ khai mô tả triển khai" Tạo tệp web.xml
  3. Nó sẽ tạo tệp web.xml. web.xml trong cấu trúc dự án

Tạo lại bộ mô tả triển khai với IntelliJ

  1. Nhấp chuột phải vào thư mục dự án của bạn
  2. Trong menu ngữ cảnh, chọn "Mở cài đặt mô-đun", sau đó bấm vào + để thêm mô tả triển khai web. Tạo mô tả triển khai
  3. Sau đó, bạn có thể thay đổi đường dẫn đến bộ mô tả của bạn hoặc Thư mục Web Ressource và ở phía bên phải.
  4. Sau đó, bạn sẽ nhận được một cái gì đó như: Cơ cấu dự án

1
và trong netbeans, bạn sẽ: nhấp chuột phải vào nút dự án> Mới> Khác> Web> Mô tả triển khai tiêu chuẩn (web.xml).
tồi tàn

2

Hãy chắc chắn rằng pom.xml được đặt đúng trong thư mục Project. và không bên trong thư mục đích hoặc bất kỳ nơi nào khác.

Có vẻ như pom.xml không được căn chỉnh tương đối.


2

Có phải cấu trúc thư mục của bạn đã bị thay đổi nên tệp không còn ở /src/main/webapp/weB-INF/web.xml ?

Để giải quyết vấn đề này, tôi đã đặt cho thư mục web của mình tên webapp và đặt nó bên trong src / main. Maven dường như tìm kiếm tệp web.xml theo mặc định tại /src/main/webapp/weB-INF/web.xml . Nếu bạn làm điều này thì bạn không cần phải nói rõ cho maven biết web.xml ở đâu. Và nếu bạn đã thay đổi cấu trúc thư mục và bản dựng của bạn gần đây đã ngừng hoạt động, đây có thể là lý do.

Lưu ý: Đây là một bài viết cũ nhưng các giải pháp được đăng không chỉ ra lý do tại sao một bản dựng hoạt động sẽ đột nhiên ngừng hoạt động.


2

Có rất nhiều câu trả lời và hầu hết trong số chúng sẽ hoạt động, nhưng tôi sẽ thêm một điểm nữa, mà theo tôi, có tầm quan trọng không kém.
Theo thông điệp tường trình của bạn, bạn đang sử dụng maven. Maven là một công cụ xây dựng quản lý dự án dựa trên một số quy ước. Nó xây dựng dự án, tạo cấu trúc thư mục phù hợp và đặt các tệp vào các thư mục tương ứng phù hợp với Sun Microsystems Directory Structure Standardcác ứng dụng Java EE / Web.

Bạn có thể kết hợp nhiều thứ, bao gồm các plugin maven, thay đổi / cấu hình lại thư mục gốc của dự án, v.v., nhưng có một bước đơn giản bạn có thể làm và dự án của bạn sẽ ổn. Chỉ cần đặt web.xmldưới của bạn src\main\webapp\WEB-INF\và cố gắng xây dựng dự án với mvn package.

Tôi hy vọng điều này sẽ thêm một chút ánh sáng cho vấn đề này.


1

Lỗi này xảy ra bởi vì bạn nói với Maven để pakage các tập tin để chiến tranh .

<packaging>war</packaging>

Bạn có thực sự cần chiến tranh? Nếu không, đặt bình ở đó. Đây là mã đầy đủ:

<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 và chiến tranh là những câu chuyện hoàn toàn khác nhau. Tôi nghĩ rằng chiến tranh là cần thiết ở đây, vì kho lưu trữ đang được triển khai vào web container và không được chạy riêng như một ứng dụng jar độc lập.
Giorgi Tsiklauri

1

FailOnMissingWebXml từ năm 2020

Tất cả các câu trả lời khác về có thể bị lỗi thời vì giá trị mặc định được sử dụng bởi plugin maven-war-plugin đã thay đổi :

Bắt đầu với 3.1.0, thuộc tính này mặc định là false nếu dự án phụ thuộc vào API Servlet 3.0 hoặc mới hơn.

Vì vậy, các CHỈ điều bạn phải làm là thêm

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

Thí dụ:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.