Lỗi lồng đường dẫn xây dựng Eclipse


122

Tôi đang làm việc trên một ứng dụng web JSP / Servlet / Tomcat đơn giản cho lớp học của mình. Giáo sư yêu cầu chúng tôi sử dụng cấu trúc thư mục hơi khác so với cấu trúc dự án web động mặc định. Thay vì sử dụng thư mục webcontent, anh ấy muốn tất cả mã nguồn của chúng tôi dưới src / main / java và src / main / webapp.

Khi tôi chạy ứng dụng, tệp chào mừng của tôi hiển thị tốt, nhưng khi tôi cố gắng truy cập vào các servlet của mình, tôi nhận được:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Tôi khá chắc đó là lỗi đường dẫn xây dựng. Tôi có cuối cùng / src trên đường dẫn xây dựng nhưng tôi nhận được cảnh báo

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

nhập mô tả hình ảnh ở đây

Tôi có cái này trong hội đồng triển khai của mình:

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Khi tôi loại trừ main / cảnh báo biến mất, nhưng nó không khắc phục được sự cố. Tôi trân trọng bất kỳ lời khuyên nào. Cảm ơn.

Câu trả lời:


309

Tôi đã gặp vấn đề tương tự ngay cả khi tôi tạo một dự án mới. Tôi đang tạo dự án Java trong Eclipse, sau đó mê cung nó, sau đó đi vào các thuộc tính đường dẫn xây dựng java loại bỏ src/và thêm src/main/javasrc/test/java. Khi tôi chạy bản cập nhật Maven, nó được sử dụng để đưa ra lỗi đường dẫn lồng nhau.
Sau đó, cuối cùng tôi nhận ra - vì tôi chưa từng xem mục đó trước đây - có một <sourceDirectory>src</sourceDirectory>dòng trong tệp pom được viết khi tôi mê cung nó. Nó đã được giải quyết sau khi loại bỏ nó.


1
Đây chỉ là một trong nhiều thủ thuật ngẫu nhiên. Không giải thích tại sao. Do đó ít hữu ích hơn.
smwikipedia

4
Tôi vừa đổi tên mục nhập pom thành scr / main / java và tất cả đều tốt. Cảm ơn cho bài acheron55
Beezer

bạn đã đặt nó ở đó? hay nó đến từ đâu?
Dòng

23

Tôi muốn đưa ra một câu trả lời không chính xác cho chủ đề này.

Vì lý do kiểm soát phiên bản và cấu trúc thư mục nghiêm ngặt, tôi không thể làm theo câu trả lời của Acheron (câu trả lời hay nhất) về việc thực hiện một việc tương tự như xóa src/, thêm src/main/javasrc/test/javavào đường dẫn xây dựng.

Tôi đã thực sự đấu tranh với sự cố đường dẫn xây dựng lồng nhau này trong một vài tuần. Câu trả lời cho vấn đề được gợi ý trong thông báo lỗi:

To enable the nesting exclude 'main/' from 'final/src'

Sửa chữa

Trong đường dẫn xây dựng, bạn cần chỉnh sửa Inclusion and Exclusion Patternsbằng cách nhấp vào Excluded: (None)và sau đó Edit...:

  1. Đi tới trình điều hướng và nhấn chuột phải vào dự án
  2. Xây dựng đường dẫn
  3. Định cấu hình đường dẫn xây dựng
  4. Nguồn (tab)

Các mẫu loại trừ

Ở đó bạn có thể thêm main/webapp/WEB-INF/classesdưới dạng một Exclusion Pattern. Sau đó, nó sẽ cho phép bạn thêm main/webapp/WEB-INF/classesvào đường dẫn xây dựng như một thư mục nguồn riêng biệt.


10

Thử cái này:

Từ tab thư viện:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Xóa các thư viện ứng dụng web của bạn:

click on "Web App Libraries" -> click "remove"

Thêm lại chúng vào:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

Đánh dấu "Thư viện ứng dụng web":

Đánh dấu "Thư viện ứng dụng web"


3

Tôi đã gặp vấn đề tương tự và câu trả lời chính xác ở trên không phù hợp với tôi. Những gì tôi đã làm để giải quyết nó là truy cập Build Path->Configure Build Pathvà trong tab nguồn, tôi đã xóa tất cả các nguồn (chỉ có một nguồn) và định cấu hình lại chúng từ đó. Tôi đã kết thúc việc xóa dự án khỏi eclipse và nhập lại dự án maven để sửa lỗi.


3

Trong trường hợp của tôi, tôi có một dự án thiên nhiên gradle trong nhật thực , vấn đề là ở a build.gradle, nơi điều này sourceSetsđược chỉ định:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

Điều này dường như hoạt động tốt với intelliJ , tuy nhiên có vẻ như nhật thực không thích tổ src, src/java, src/resources. Trong nhật thực, tôi phải thay đổi nó thành:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}

3

Đây là một giải pháp đơn giản:

  1. Nhấp chuột phải vào dự án >> thuộc tính >> đường dẫn xây dựng;
  2. Trong tab Nguồn, Chọn tất cả các thư mục nguồn;
  3. Loại bỏ chúng;
  4. Nhấp chuột phải vào dự án, Maven >> Cập nhật dự án.

2

Bạn phải tách các nguồn của mình và thư mục đích của bạn nơi xuất bản dựng. Điều quan trọng cần lưu ý là không có tệp lớp nào có thể kết thúc trong thư mục nguồn. Điều này không chống lại lời khuyên của giáo sư - thực ra ông ấy đang quảng bá cấu trúc nguồn chuẩn của maven cho ./src/main/java và ./src/main/webapp. Cái thứ hai nên giữ ví dụ. tệp WEB-INF / web.xml bắt buộc nhưng bạn sẽ không bao giờ đặt các lớp thực tế ở đó.

Những gì bạn cần thay đổi là thư mục đích của bạn. Tôi khuyên bạn nên đi theo các tiêu chuẩn tương tự và chọn tên "./target" cho điều này. Tất cả các tệp được xây dựng sẽ đi vào đây và đóng gói nó sẽ dẫn đến một cấu phần có thể triển khai chính xác. Nếu bạn chuyển sang sử dụng maven sau này, nó cũng sẽ giúp thực hiện điều này theo cách có thể lặp lại, có kịch bản.

Hy vọng rằng rõ ràng vấn đề của bạn.


1

Giải pháp được chấp nhận không hoạt động với tôi nhưng tôi đã thực hiện một số nghiên cứu về cài đặt dự án.

Giải pháp sau đây đã khắc phục sự cố cho tôi ít nhất là NẾU bạn đang sử dụng Dự án web động:

  1. Nhấp chuột phải vào dự án sau đó là thuộc tính. (hoặc alt-enter trên dự án)
  2. Trong hội đồng triển khai loại bỏ "src".

Bạn sẽ có thể thêm src / main / java. Nó cũng tự động thêm nó vào Deployment Assembly.

Lưu ý: Nếu bạn đã thêm một lưu ý src / test / java rằng nó cũng sẽ thêm nó vào Triển khai Assembly. Nói chung, bạn không cần cái này. Bạn có thể loại bỏ nó.


1

Điều này bắt đầu đưa tôi xuống một lỗ hổng lớn về việc sửa chữa các trục trặc với Eclipse, tuy nhiên tôi vừa xóa dự án khỏi Eclipse và nhập lại để sửa nó.


0

Để trình biên dịch Eclipse hoạt động bình thường, bạn cần xóa cuối cùng / src khỏi đường dẫn nguồn và thêm cuối cùng / src / main / java thay thế. Điều này cũng có thể giải quyết vấn đề của bạn vì bây giờ thư mục xây dựng sẽ không nằm trong thư mục nguồn Java.


0

STS IDE

Nó phụ thuộc vào thư mục mà người ta nói "Sử dụng làm thư mục nguồn" cho. Trong cấu trúc trên hình, nếu một người nói nó với thư mục "target" hoặc "created", anh ta sẽ gặp lỗi "lồng nhau". Nhưng trên thư mục "cxf", là thư mục cuối cùng, được đề cập trong phần 'plugin' của pom.xml và nơi bắt đầu từ cấu trúc gói (như được hiển thị trên tệp .wsdl), tức là - thư mục phù hợp để thực hiện 'nguồn' một. , sau đó không có lỗi


0

Có vấn đề tương tự. Đã thực hiện các bước sau, sự cố đã được giải quyết:

  1. Loại bỏ dự án trong nhật thực.
  2. Xóa tệp .Project và. Thư mục cài đặt.
  3. Nhập lại dự án dưới dạng dự án maven hiện có để làm nhật thực.

-3

Tạo hai thư mục: final/src/để lưu trữ mã nguồn java và final/WebRoot/.

Bạn không thể đặt nguồn và webroot cùng nhau. Tôi nghĩ rằng bạn có thể hiểu sai về giáo viên của bạn.

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.