2011-07-04 26 views
6

Khi cố gắng để chạy dự án của tôi như một WebApplication từ Eclipse, tôi đã được lỗi sau:NoClassDefFoundError: GuiceServletContextListener khi chạy GWT + GAE từ Eclipse

[WARN] failed [email protected]3fd{/,D:\Dev\Projects\The Five Orbs\trunk\target\fiveorbs-0.1}: java.lang.NoClassDefFoundError: com/google/inject/servlet/GuiceServletContextListener 
[WARN] failed [email protected]: java.lang.NoClassDefFoundError: com/google/inject/servlet/GuiceServletContextListener 
[WARN] Error starting handlers 
java.lang.NoClassDefFoundError: com/google/inject/servlet/GuiceServletContextListener 

Lớp có thể được tìm thấy tại thời gian biên dịch mặc dù (tùy chỉnh của tôi GuiceServletConfig mở rộng GuiceServletContextListener và biên dịch đúng cách).

Thư viện guice-servlet-3.0.jar xuất hiện cả trong đường dẫn xây dựng dự án và trong đường dẫn lớp của Cấu hình chạy ứng dụng web của tôi trong Eclipse.

Các Arguments bảng điều khiển của Run Cấu hình của tôi có cấu hình như sau: trong lập luận Chương trình:

-remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -startupUrl TheFiveOrbs.jsp -logLevel INFO -server com.google.appengine.tools.development.gwt.AppEngineLauncher -port 8888 -codeServerPort 9997 -war "D:\Dev\Projects\The Five Orbs\trunk\target\fiveorbs-0.1" com.fiveorbs.TheFiveOrbs 

trong đối số VM:

-javaagent:D:\Dev\Programs\appengine-java-sdk\lib\agent\appengine-agent.jar -Xmx512m -Dappengine.sdk.root=D:\Dev\Programs\appengine-java-sdk 

Khi tôi chạy mvn gae: chạy từ dấu nhắc lệnh với Maven, mọi thứ đều ổn - máy chủ khởi động đúng và không có ngoại lệ nào được hiển thị.

Tôi đã vật lộn với vấn đề này trong một vài giờ và thực sự không thể hiểu tại sao nó xảy ra.

Cảm ơn trước vì bất kỳ gợi ý nào bạn có thể cung cấp.

Sébastien

Trả lời

5

guice-servlet-3.0.jar nên không ở trong anh em khởi động cấu hình classpath, nó phải sống trong thư mục D:\Dev\Projects\The Five Orbs\trunk\target\fiveorbs-0.1\WEB-INF\lib của bạn.

+0

Thực vậy, điều này giải quyết được lỗi. Cảm ơn rất nhiều! –

+3

Làm thế nào để bạn thực hiện điều đó? Tôi có 'guice-servlet-3.0.jar' trong classpath của tôi như là một phụ thuộc Maven, vì vậy nó sẽ không biến nó thành' WEB-INF/lib' bên trong Eclipse; Chỉ phụ thuộc GAE SDK mới thực hiện được. Tôi có thư mục WAR được đặt thành 'src/main/webapp' (trong đó, có' WEB-INF/'), và tôi không muốn chạy ứng dụng của mình từ' target/'của Maven, vì nó yêu cầu chạy 'mvn package' trước. – derabbink

+1

Chưa hết, đó là cách Maven hoạt động! (cho đến khi gwt-maven-plugin bằng cách nào đó _fixed_). Thành thật mà nói, bạn chỉ cần chạy 'mvn package -Dgwt.compiler.skip' khi bạn thay đổi các phụ thuộc của bạn, mà thực sự không phải là thường xuyên. Một cách khác là không sử dụng máy chủ nhúng và sử dụng 'mvn appengine: devserver' (hoặc' mvn jetty: run' hoặc 'mvn tomcat7: run' khi bạn không sử dụng GAE) cùng với chạy GWT DevMode trong'-noserver 'chế độ. –

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