2013-02-22 26 views
5

Tôi chỉ mới bắt đầu với việc phát triển GWT bằng Maven như một hệ thống xây dựng.Có cấu trúc dự án GWT Maven không cấu thành các trách nhiệm không?

Tôi đến từ thế giới Java + Flex, vì vậy tự nhiên tôi có mô-đun phụ phía máy khách và mô-đun phụ phía máy chủ được tách riêng biệt.

Trong khi đào sâu vào các thực hành tốt nhất và GWT đào sâu hơn, với tôi cấu hình mặc định của các dự án GWT cảm thấy ngày càng giống như một tổng số trách nhiệm. Đặc biệt là khi nói đến các dự án đa mô-đun. Tôi đã hiểu, rằng quy ước nói rằng logic phía máy chủ nằm trong các gói "máy chủ", mã được chia sẻ trong "được chia sẻ" và nội dung được biên dịch sang HTML + JavaScript bởi trình biên dịch GWT trong các gói "khách hàng". Và tất cả các mã đều đi tới src/main/java. Càng xa càng tốt.

Không có vấn đề làm thế nào tôi cố gắng để xem nó ... với tôi công cụ trong các gói "khách hàng" chỉ đơn giản là chết mã. Ngay cả khi trình biên dịch java biên dịch lớp này, các lớp không bao giờ được sử dụng khi chạy và chỉ cần cung cấp đầu vào cho trình biên dịch GWT trong giai đoạn biên dịch. Vì vậy, ngay cả khi nó trông giống như Java, nó thực sự không và chỉ trông giống như Java. Nó cảm thấy bẩn thỉu khi đặt những cái này vào cùng một cái lọ như mã "sống".

Sẽ không phải là cấu trúc maven như có ý nghĩa hơn này:

/src/ 
/src/main/ 
/src/main/java 
/src/main/shared 
/src/main/gwt 

Và để có việc sử dụng java-biên dịch-plugin src/main/java và src/main/chia sẻ và trình biên dịch GWT sử dụng src/main/gwt và src/main/shared? Ngoài ra nó sẽ cảm thấy tốt hơn rất nhiều nếu xây dựng sẽ sản xuất hai loại hiện vật ... bình thường "lọ" có chứa các clases từ src/main/java và src/main/chia sẻ và một "gwt" thứ hai, trong đó có chứa các lớp và nguồn của src/main/gwt và src/main/shared.

Tôi sẽ không thêm phụ thuộc vào một số lọ hỗn hợp, nhưng có thể quyết định xem tôi có muốn nhập một số thành phần GWT hoặc nếu tôi muốn nhập một số chức năng phía máy chủ.

Sau đó là mặc định GWT là đặt xml, tài nguyên và các công cụ khác trong src/main/java ... XML & & Tài! = Java ;-)

Hoặc là có một lý do thực sự cho tất cả điều này, rằng tôi chỉ đơn giản là đã không nhận ra được nêu ra ... hoặc tôi chỉ đơn giản là phải bắt đầu nhận được bẩn và không worying về các công cụ như thế?

Chris

Trả lời

3

Tôi cũng đã cố tách riêng mã phía máy khách GWT khỏi mã phía máy chủ. Phương pháp tôi đã sử dụng là có một dự án cấp cao nhất với 2 tiểu dự án, một cho phía máy chủ, một cho phía máy khách. Dự án cấp cao nhất có một tệp pom.xml chứa một phần tử cho mỗi tiểu dự án.

Dự án phía máy khách chứa nguồn java GWT trong src/main/java và phần còn lại của tệp webapp trong src/main/webapp. Dự án phía máy chủ chỉ chứa mã phía máy chủ.

Có lẽ không phải là giải pháp tidiest nhưng ít nhất có sự tách biệt rõ ràng hơn.

+0

Tôi vừa thảo luận một kịch bản trong đó tôi đã có một Singleton mẫu trong gói máy chủ của tôi và thật dễ dàng để gọi một phương thức về điều này từ mã phía máy khách. Vì vậy, với tôi, linh hồn làm sạch sẽ là ho có 3 dự án (máy khách, chia sẻ, máy chủ) ... nhưng tôi đoán điều này sẽ thổi mọi thứ lên một cách đáng kể. –

+0

Tôi không bao giờ bận tâm với việc chia sẻ, tôi không thích GWT RMI, quá khó hiểu. Tôi chỉ sử dụng XML cho các máy khách/máy chủ thay thế. GWT có xử lý xml. – NickJ

5

Tôi đã đi đến kết luận tương tự cách đây một thời gian và đã tạo một vài kiểu mẫu để giúp bắt đầu: https://github.com/tbroyer/gwt-maven-archetypes (announcement).

Mẫu nguyên mẫu đó vẫn có *.gwt.xml et al. vào src/main/java, vì Plugin Google dành cho Eclipse không hỗ trợ đặt chúng ở bất kỳ nơi nào khác (tôi nghe nói nó đã được sửa trong phiên bản gần đây nhưng chưa kiểm tra).

+0

Tôi đoán một giải pháp thực sự sạch sẽ là nếu gwt-maven-plugin được mở rộng để cung cấp một loại bao bì tùy chỉnh (ví dụ) "gwt". Bên trong một gwt-artifact như vậy tôi có thể có các phụ thuộc vào các tạo phẩm jar và gwt và vị trí mã mặc định sẽ là (ví dụ) src/main/gwt. Trong trường hợp này, tôi không trộn lẫn các jse giả-jars và các jars Java thực, nhưng tôi có thể tham khảo mã Java thực từ GWT. Tôi woudn't có lớp học chết trong classpath máy chủ của tôi. Và bất kỳ ai sẽ thấy ngay lập tức rằng đó thực sự là mã GWT. –

+0

Tôi đang làm việc trên một điều như vậy (nguyên mẫu đầu tiên trên GitHub của tôi nếu bạn muốn nó). Tuy nhiên, bạn vẫn chưa kết hợp máy khách và máy chủ trong cùng một mô-đun Maven (nghĩ về nó: GWT cần cả hai nguồn và các lớp được biên dịch, vì vậy bạn cần gọi javac, lý tưởng thông qua trình biên dịch-maven-plugin, với một nguồn khác path –easy và classpath cho phía máy chủ của bạn, cũng có sự không tương thích giữa một số thành phần phía máy chủ và trình biên dịch GWT hoặc DevMode, vì vậy bạn sẽ muốn tách riêng một số chỉ số dưới dạng máy chủ và một số khác như được chia sẻ; không phải _the Maven way_ làm việc, chỉ cần phân chia các module) –

+0

Hey ... Tôi muốn được vui mừng để có hai điều cách nhau :-) Vì vậy, với những thay đổi của bạn, sẽ có thiết lập này với hiện vật gwt và đồ tạo tác jar? Điều này sẽ rất tuyệt vời. Chỉ cần có một cái nhìn tại repo github của bạn ... tốt này thực sự là một "nguyên mẫu đầu" ;-) –

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