2011-12-13 19 views
16

Tôi có một dự án Maven đa mô-đun sử dụng các lớp phủ WAR (ngăn xếp chúng sâu 3). Mọi thứ đều hoạt động tốt trong Maven, nhưng tôi không thể khởi chạy WAR của tôi từ bên trong Eclipse vì nó phàn nàn không tìm thấy các tệp khác nhau.Làm thế nào để xử lý các lớp phủ Maven WAR trong Eclipse?

Làm cách nào tôi có thể định cấu hình Eclipse (và trình chạy) để tôi có thể chạy WAR của mình từ Eclipse mà không phải cài đặt Maven trước? Tôi nên thêm rằng các dự án Eclipse WAR của tôi không phải là các dự án web động ... là một phần của những gì tôi cần làm? LƯU Ý: Câu hỏi sau đây liên quan đến chủ đề, nhưng câu trả lời cho biết bạn phải luôn cài đặt Maven trước và tôi biết rằng không thể đúng vì có những người sử dụng Eclipse mà không có Maven.

Maven overlays and Eclipse

Tôi cũng đã tìm thấy này mà làm cho tôi nghĩ rằng nó không thể qua vani M2E:

http://jira.codehaus.org/browse/MNGECLIPSE-599

Trả lời

18

tôi đã có thể thực hiện điều này và mọi thứ hoạt động tuyệt vời. Dưới đây là những việc cần làm:

Trước hết bạn cần plugin Eclipse M2E cần thiết để Eclipse tự động nhận dạng và cập nhật các phụ thuộc Maven. Nó cũng cung cấp một trình soạn thảo POM đồ họa đẹp mắt. Vào cuối năm 2011, dự án M2Eclipse đã được tặng cho nền tảng Eclipse bởi Sonatype và bây giờ được gọi đơn giản là M2E. Tuy nhiên, nó vẫn chưa được xuất xưởng với phiên bản Java EE của Eclipse Indigo và phải được cài đặt riêng rẽ qua trang web cập nhật của họ

Trong quá khứ, việc lồng ghép giữa Eclipse và Maven đã phần nào khó khăn. Tuy nhiên, tích hợp Maven dựa trên Eclipse mới này giờ đây nhận thức được thực tế là có nhiều trình cắm thêm Maven được sử dụng trong các tệp POM và chỉ một số mục tiêu nhất định của các trình cắm thêm có ý nghĩa trong môi trường IDE. Hơn nữa, những mục tiêu đó có ý nghĩa khi chạy bên trong một IDE có thể cần cấu hình đặc biệt. Để xử lý đúng M2E này hiện nay hỗ trợ khái niệm "kết nối"

M2E có danh sách dài các đầu nối đặc biệt cho phép nó thực hiện "Điều Đúng" khi gọi các mojos khác nhau (mục tiêu plugin Maven). Để xem danh sách các trình kết nối có sẵn trong Eclipse, hãy vào hộp thoại Preferences và chọn Maven-> Dicovery-> Open Catalog. Các đầu nối này phải được cài đặt tự động khi được phát hiện trong một tệp {{pom.xml}} trong khi nhập dự án. Tuy nhiên, điều này đòi hỏi phiên bản đúng của thuật sĩ nhập khẩu M2E Maven (mà Indigo không có cho đến SR2).

Ngoài ra, đôi khi các trình kết nối này bị lỗi và chúng tôi cần sử dụng các trang web cập nhật hàng đêm hoặc beta để nhận các bản sửa lỗi mới nhất. Nếu bạn có phiên bản cũ hoặc lỗi, bạn cần xóa và nhập lại các dự án sau khi nâng cấp. Vì những lý do này, theo ý kiến ​​của tôi, tất cả các đầu nối M2E phải được cài đặt bằng tay trước khi nhập dự án của bạn vào Eclipse.

Trình kết nối M2E-WTP là kết nối bạn cần để tạo lớp phủ WAR hoạt động trong các trình khởi chạy Eclipse cho "Máy chủ" Eclipse. Trình kết nối này được sử dụng để tích hợp Maven với WTP ... và do đó xử lý các lớp phủ WAR, thiết lập thùng chứa servlet, cấu hình WTP Eclipse, cài đặt bối cảnh gốc và các thứ khác mà tất cả hướng tới việc tạo công cụ web Eclipse "Just Work" khi mô-đun Maven WAR được nhập vào Eclipse như một dự án.

Các trang web cập nhật cho đầu nối M2E-WTP là: http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

Thêm trang web M2E-WTP này và cài đặt kết nối. Tuy nhiên, lưu ý rằng cả M2E lẫn đầu nối M2E-WTP đều không phụ thuộc vào lớp phủ WAR vào WAR cuối cùng. Bạn phải làm điều này bằng cách thêm các phụ thuộc bắt buộc vào tệp tin WAR pom.xml cuối cùng. Tôi không biết tại sao các công cụ không làm điều này, nhưng họ không - vì vậy chỉ cần vượt qua nó. ;-)

Tại thời điểm này, tôi cũng khuyên bạn nên cập nhật đầy đủ thông qua {{Help-> Check for Updates}}. Một khi điều này được thực hiện, bạn sẽ có thể chỉ cần thêm một máy chủ Eclipse, bấm vào dự án của bạn (không phải là một lớp phủ, nhưng chúng thường xuyên) và chọn "Chạy trên máy chủ ...".

Các thay đổi được thực hiện cho WAR hoặc lớp phủ WAR sẽ được tự động xuất bản lên máy chủ của bạn. Các thay đổi Javascript được xuất bản mà không cần khởi động lại máy chủ ... tất cả những gì bạn phải làm là nhấn làm mới trong trình duyệt để xem mã mới đang chạy.

Second Cập nhật: Có một lỗi (https://issues.sonatype.org/browse/MECLIPSEWTP-174) trong M2E mà có thể dẫn đến thư mục WEB-INF/lib vô tình đánh mất tất cả các file JAR của nó. Khi điều này xảy ra, ứng dụng servlet của bạn rõ ràng sẽ không khởi động. Giải pháp thay thế là làm sạch máy chủ bằng cách nhấp chuột phải vào máy chủ và chọn "sạch". Lưu ý rằng việc làm sạch thư mục công việc một mình sẽ không khôi phục các JAR bị thiếu này.

+0

Rất vui khi tôi tìm thấy câu trả lời này. Nhưng nó không hiệu quả với tôi. Tôi đã thử một trường hợp rất đơn giản: dự án chiến tranh đơn giản A, dự án chiến tranh đơn giản B, và pom A tuyên chiến B là phụ thuộc, nhưng không thực sự sử dụng bất kỳ lớp nào từ B - trong trường hợp đó 'mvn install' chạy thành công, với dự án lớp phủ B được thêm vào chiến tranh A như mong đợi. Nhưng nếu tôi thêm vào dự án Một số tham chiếu đến một lớp từ B, tôi thấy hai vấn đề: (1) eclipse không thể giải quyết tham chiếu đến lớp từ B. (2) 'mvn install' (từ nhật thực hoặc từ dòng lệnh) thất bại với lỗi biên dịch trên mọi vị trí trong mã A nơi tôi tham khảo lớp từ B. – rapt

+1

Việc cài đặt trình kết nối như bạn đã đề xuất không giải quyết được các sự cố này. Tôi đang thiếu gì ở đây? – rapt

+0

"Tuy nhiên, lưu ý rằng cả M2E lẫn đầu nối M2E-WTP đều sẽ không phụ thuộc vào lớp phủ WAR vào WAR cuối cùng". Tôi gặp vấn đề chính xác này, bạn có biết bất kỳ công việc nào khác xung quanh không. Cái bạn cung cấp sẽ không hoạt động trong trường hợp của tôi. – Hoffmann

Các vấn đề liên quan