2010-01-05 14 views
15

Tôi đang cập nhật dự án hiện có từ GWT 1.5.2 lên GWT 2.0.0. Chúng ta sử dụng maven 2 để quản lý các phụ thuộc của chúng ta và làm tất cả phát triển của chúng ta trong Eclipse 3.5.Làm cách nào để có được các phụ thuộc được quản lý của maven được sao chép vào war web-inf lib để tôi có thể chạy ứng dụng GWT 2.0 của mình trong chế độ gỡ lỗi trong Eclipse?

Vì chúng tôi sử dụng maven để quản lý các phụ thuộc của mình, tôi không có tất cả các lọ đó trong thư mục war \ web-inf \ lib như GWT chỉ định. Thay vào đó, họ đang ở trong kho lưu trữ maven, chỉ nơi maven thích chúng. Tôi đã thiết lập dự án để maven có thể xây dựng và khởi chạy thành công ở chế độ dev hoặc web và ứng dụng chạy một cách chính xác.

Vấn đề là khi tôi khởi chạy từ Eclipse, tôi nhận được một java.lang.NoClassDefFoundError. Nếu tôi tự sao chép các phụ thuộc của tôi vào war \ web-inf \ lib trước khi khởi chạy, mọi thứ đều chạy tốt, nhưng điều đó không cho vay chính nó vào một giải pháp dài hạn. Đầu tiên, nếu tôi kiểm tra tất cả các lọ đó trong điều khiển phiên bản của chúng ta, điều đó sẽ phá hủy phần lớn giá trị chúng ta nhận được từ maven. Như khó chịu như maven có thể được, mương nó không phải là câu trả lời. Thứ hai, có các nhà phát triển sao chép thủ công chúng trên mỗi lần họ muốn gỡ lỗi một cái gì đó là vô lý.

Vì vậy, tôi có thể lấy Eclipse sao chép các phụ thuộc vào chiến tranh \ web-inf \ lib trước khi khởi chạy không? Có một giải pháp thay thế mà tôi đang thiếu?

Cảm ơn,

Tony

Trả lời

11

Chạy mục tiêu gwt:eclipse sẽ sao chép phụ thuộc maven vào war/WEB-INF/lib. Xem phần Cấu hình Eclipse của tài liệu Eclipse IDE Integration của Maven GWT plugin để biết thêm chi tiết. Ngoài ra, hãy xem this answer về Maven GWT 2.0 và Eclipse.

1

Nếu bạn có phương pháp đóng gói trong pom.xml của bạn thiết lập để chiến tranh nó nên sao chép depdencies runtime vào mục tiêu/chiến tranh/WEB-INF/lib.

Hoặc dự án của bạn có xây dựng thứ gì đó lớn hơn như tai không? Nếu vậy bạn có lẽ nên chia pom.xml của bạn thành định dạng đa dự án.

Đối với Eclipse, tôi không quá quen thuộc với nó vì vậy tôi thực sự không thể giúp bạn ở đó. Bạn (hoặc có thể bạn) chạy một mục tiêu maven (như "cài đặt") khi bạn chạy hoặc gỡ lỗi?

2

Bạn nên cài đặt m2eclipse plugin và sử dụng để xây dựng dự án của mình trong nhật thực. Điều này sẽ gọi maven là một công cụ bên ngoài từ bên trong nhật thực.

Loại tạo tác dự án maven của bạn nên được đặt thành chiến tranh, điều này sẽ cho phép con quạ khám phá các phụ thuộc và gói chúng lại.

Xem những liên kết này:

force Maven2 to copy dependencies into target/lib

http://maven.apache.org/plugins/maven-war-plugin/

http://maven.apache.org/plugins/maven-war-plugin/examples/rapid-testing-jetty6-plugin.html

+0

Tôi đã thêm plugin m2eclipse vào Eclipse, nhưng điều đó dường như đã đưa Eclipse đến đầu gối của nó. Nó bây giờ bị mắc kẹt "Cập nhật maven Dependencies" khi khởi động. Khi tôi đã cài đặt và chạy Eclipse mới, tôi sẽ thử. – Tony

+0

Kho lưu trữ maven cục bộ có thể làm giảm bớt vấn đề cập nhật phụ thuộc. Tôi khuyên bạn nên thiết lập một phiên bản của Nexus http://nexus.sonatype.org/ và đặt cài đặt maven của bạn để sử dụng mirrorOf = * -> repo nexus địa phương của bạn. Bản cập nhật ban đầu sẽ mất một chút thời gian, nhưng sau đó phần còn lại của nhóm của bạn sẽ tải xuống các tạo phẩm được lưu trữ cục bộ, với lợi ích cho bạn, nhóm của bạn, repo maven công cộng và phần còn lại của internet. – crowne

+0

Plugin m2eclipse chắc chắn sẽ làm cho cuộc sống của bạn dễ dàng hơn nhiều. Nó tìm thấy các tham chiếu giữa các dự án và liên kết chúng thông qua Eclipse, do đó bạn không cần phải đi đến dòng lệnh để xây dựng lại các ảnh chụp nhanh mỗi khi bạn sửa đổi một dự án phụ thuộc. Nó cũng tạo ra classpath của bạn cho bạn và giữ nó cập nhật với tệp pom. Vấn đề duy nhất tôi đã thấy là đôi khi nó không kéo xuống các phụ thuộc mới, vì vậy bạn phải làm một 'mvn dependency: resolve' từ dòng lệnh khi bạn thêm một phụ thuộc mới không có trong kho lưu trữ cục bộ của bạn. –

0

này không được coi là một vấn đề. Nếu bạn đang sử dụng Eclipse + WTP thì WTP cho phép bạn khai báo các jars được liệt kê dưới 'phụ thuộc module J2EE' trong thuộc tính của dự án. Những jars được tự động xuất bản lên tomcat (xem chú thích ở cuối chú thích này) Bạn cần khai báo biến M2_REPO trong môi trường nhật thực (tìm kiếm trợ giúp nhật thực cho 'biến classpath'), nó trỏ đến kho lưu trữ maven cục bộ của bạn, và chỉ cần thêm các jars bên ngoài từ đó vào dự án của bạn và đánh dấu chúng là 'phụ thuộc J2EE'. Tôi đã làm điều đó với hàng tấn dự án, Maven và Eclipse sống song song :) (không có m2eclipse)

Tùy chọn thứ hai là cố gắng tích hợp Eclipse và Maven với plugin m2eclipse, như đã đề cập, nhưng tôi thấy điều này không cần thiết.

Có tùy chọn thứ ba, nếu bạn không sử dụng WTP (nhưng bạn nên). Giả sử bạn sử dụng tomcat, sau đó bạn có thể sao chép các lọ đó thành $ (tomcat.home)/common/lib. Nếu bạn có thể làm điều đó chỉ cho trường hợp riêng của bạn về tomcat (trên mỗi máy của nhà phát triển) thì bạn tốt để đi. Điều này được cho là một giải pháp có tác động thấp sẽ đưa các lọ đó vào đường dẫn class khi chạy, nhưng nó không mở rộng tốt.

lưu ý: tiếc là đường dẫn lớp của các dự án web Eclipse có thể gây nhầm lẫn. Khi bạn thêm các lọ vào đường dẫn xây dựng thông thường của dự án, chúng không được triển khai (sao chép trên) vào tomcat. Để giải quyết vấn đề này, WTP định nghĩa một thư viện đặc biệt gọi là Webapp Library - thư viện này chứa tất cả các thư trong thư mục WEB-INF/lib của dự án, cũng như tất cả các jars bên ngoài được đánh dấu là J2EE Module Dependencies. Tất cả những lọ này đều tìm cách thích hợp với WEB-INF/lib khi xuất bản lên tomcat.

2

IDE nhận biết maven (ý tưởng, nhật thực, netbeans) nên tự động đóng gói này. có thể bạn:

  • quên bật nhập maven bên trong IDE?
  • không thêm các phụ thuộc này vào tệp pom.xml (do đó chúng không được bao gồm trong phần 'gói mvn'). họ đang bỏ qua cho thời gian chạy
0

Khá đơn giản: 1. Tạo một "lib" thư mục thuộc dự án của bạn như thế này: "\ src \ chính \ webapp \ WEB-INF \ lib" 2. Sao chép cần thiết " lọ "vv mà bạn muốn bao gồm bên trong thư mục gói WAR của bạn. 3. Gọi xây dựng maven của bạn như bạn thường làm. Tôi sử dụng "mvn install", mà tạo ra xây dựng các tập tin chiến tranh.

Nếu bạn kiểm tra tệp WAR, các lọ bạn đã bao gồm trong bước 1 và bước 2 sẽ ở đó.

Chúc mừng.

+0

Điều này không hữu ích.Nếu bạn đọc đoạn thứ ba của câu hỏi, tôi giải thích tại sao bước 2 của câu trả lời của bạn không hiệu quả với tôi. – Tony

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