2013-03-02 50 views
0

之間共享RemoteService實現我一直在苦苦掙扎了一會兒,試圖重新使用一個GWT項目的實施RemoteService進入一個新的。 以下是大圖:2個GWT項目

我有一個正在運行的smartgwt-mobile項目,現在我們決定使用普通的smart-gwt來製作同一個項目的桌面版本。這個新應用程序的GUI顯然不同,但服務器端代碼將完全相同。

我試圖通過鏈接新源結構中的其他項目中的包文件夾(我正在使用Eclipse與GWT插件)或通過添加新的源文件夾來「借用」RemoteService接口,其異步副本和整個服務器包借用的代碼路徑作爲構建路徑的過濾源文件夾,雖然這符合Eclipse依賴檢查程序,但GWT編譯器無法找到借用代碼,這表明我需要在模塊.gwt.xml文件中添加「inherit」聲明。

當我做到這一點,重新編譯它現在預計在借用代碼是不能接受的,因爲它會影響其他項目的根第二模塊.gwt.xml文件。

我一直在閱讀了GWT模塊文檔上,但我看不出如何實現這樣的計劃。實際上我不可能做到我想要達到的目標。

我願意,如果能解決問題,創建第三個項目,只是定義,然後將移動和桌面SmartGWT的項目都被繼承了GWT RemoteService模塊。

是否有人對如何解決這個問題的建議?

回答

1

I'l同意"third project that simply defines a GWT RemoteService module that then will be inherited by both the mobile and desktop smartgwt projects"

爲什麼?因爲,我只是已經這樣做了。是的,這顯然是一個DAO項目(DB層),其中有我所有的數據庫業務邏輯方法。

而且它總是更好地維護單獨的DAO layer以將您的data暴露給services(ex.webservices)

+0

感謝您的輸入。我曾希望有一個簡單的方法可以在項目之間共享代碼,但由於沒有其他建議,我將創建一個由兩個GWT項目共享的RemoteService項目。 – Gert 2013-03-03 09:00:18

+0

這對代碼維護也會更好,在較小的塊Upvote中也可以標記爲答案,如果您覺得有用。 – 2013-03-03 11:14:42

+0

你基本上通過引用我自己的帖子回答。雖然讚賞我不認爲這是我的問題的答案,這是關於鏈接在現有的RemoteService代碼。我顯然知道我可以創建一個單獨的項目,但對於這種特殊情況,我試圖避免再創建一個額外的項目。缺乏其他建議表明我沒有簡單的方法來做到這一點。我會upvote你的答案。 – Gert 2013-03-03 12:49:37

0

所以這是我如何解決這個問題。 鏈接到現有的GWT項目源文件夾的問題是,GWT編譯器總是(至少看起來是這樣的)期望找到GWT模塊定義文件(.gwt.xml)。即使Eclipse依賴關係解析器對它沒有問題,我也無法以源文件夾的方式鏈接GWT編譯器。

因此,我創建使用GWT Eclipse插件第三個項目。我沒有選中「創建示例代碼」選項,所以我結束了一個空的GWT項目。然後我選擇'添加'>'新建'>'其他'>'Google'>'模塊',輸入模塊名稱,例如'myModule',包名,例如'com.myCompany.myModule'並單擊'完成'。 GWT New Module嚮導創建了一個名爲'com.myCompany.myModule.client'的包和一個子包,我自己創建了'com.myCompany.myModule.server'。

現在我複製了RemoteService和相關類(實現和異步版本),以及RemoteService代碼從我想借用的原始項目調用的所有服務器端代碼,並將其粘貼到新項目中。很快,我完成了所有依賴關係,並且我在新的Smart-GWT Web應用程序項目上打開了構建路徑對話框,並在項目選項卡中包含了GWT RemoteService模塊項目。最後要做的是向.gwt添加一個繼承元素。xml文件:

<inherits name='com.myCompany.myModule.MyModule'/>

瞧:這是所有有給它。如果您選擇「GWT編譯項目」,它會編譯並在開發模式下運行而不會出現警告。

我現在仍然需要從第一個項目中刪除共享代碼,並從模塊中繼承,這只是我已經做過的重複。

最後,這並不像我想象的那麼痛苦,所以我推薦這種方法。