2011-12-24 36 views
4

我想將GWT庫模塊打包到JAR文件中,並通過將JAR文件添加到其類路徑中來在單獨的GWT Web應用程序中使用該庫。需要幫助將GWT庫模塊封裝到JAR中

的JAR包含:

  • Java源代碼
  • RequestFactory產生源
  • UiBinder的產生源
  • 類文件
  • 庫模塊描述
  • UiBinder的XML文件

庫模塊從Web應用程序繼承:

<module> <!-- my web app's module descriptor --> 
    ... 
    <inherits name="[path to my library module].Library"/> 
    ... 
</module> 

不過,我遇到了

Deferred binding failed for '[path to mylibrary].client.ClientFactory'... 

錯誤,當我嘗試啓動Web應用程序,它初始化庫在其onModuleLoad( ) 方法。失敗是由庫模塊使用的UiBinder視圖和RequestFactory引起的。以開發模式啓動或編譯Web應用程序會導致錯誤,並顯示錯誤消息,指出丟失的CSS文件和非法引用emul.java.util包下生成的源代碼(我試圖在JAR中包括此包和所有其他生成的源代碼, t幫助。)

有人能告訴我需要包含在JAR中嗎?使用UiBinder和RequestFactory的庫模塊是否需要額外的資源?

是否有人成功地將使用RequestFactory和UiBinder的GWT庫模塊打包到JAR中?

進一步說明:問題是關於創建一個GWT庫模塊;一個包含客戶端和服務器組件的模塊,RequestFactory和UiBinder。請注意,將GWT庫模塊打包到JAR中,而將具有入口點的常規GWT模塊打包到WAR中。我試圖從另一個GWT項目打包這樣的庫模塊和GWT <inherit>失敗。

回答

1

要麼我誤解了你的問題,要麼你錯誤地關聯了GWT編譯和Java字節碼編譯。

傳統的Java開發

  1. Java源代碼編譯成Java字節碼的.class文件。
  2. 在開發期間以及在 部署期間編譯.class文件。
  3. 編譯的.class文件可以在兩個 開發和部署的類路徑中使用
  4. 其位置符合各自 包不要緊,如果.class文件的jar文件或者文件夾 層次,只要命名空間。
  5. Java源文件不能部署到部署類路徑 中,但可以將JSP源文件作爲JSP部署到戰爭中。

GWT並非如此。

  1. GWT是客戶端開發。
  2. GWT被編譯成Javascript。
  3. 生成的JavaScript打包到一個war文件夾中。
  4. 即,編譯成可執行文件的GWT是JavaScript文件。
  5. GWT編譯要求所有的Java類都是源文件。
  6. 您的Java類引用的任何Java庫也必須是Java源文件。

GWT戰爭

  1. GWT還便於客戶端的對準和連通服務器端。
  2. 服務器端通常是部署到JEE戰爭結構中的傳統Java。
  3. 因此,部署之戰將GWT客戶端編譯爲javascript以及JEE .class字節碼文件。
  4. 但是,GWT JavaScript文件與HTML,CSS和其他URL可尋址資源一起放置在戰爭的URL可見部分。
  5. 服務器端編譯的java字節碼文件或jar被放入非URL尋址的類和lib目錄中。

因此

  1. GWT編譯部署結構不能用於開發。
  2. GWT被編譯成javascript部署戰爭結構。
  3. 將GWT編譯資源封裝到 的jar包中進行部署是沒有「這樣的事情」。
  4. 編譯後的GWT資源必須打包到戰爭的URL地址 一側。
  5. 在編譯後的JavaScript文件中,類路徑沒有「這樣的東西」。 JSNI中的任何類路徑概念都是模擬JSNI的便利。

在結論

編譯GWT資源是不可用的,也不它們將是GWT開發可見的,因爲...... GWT開發需要Java源代碼,並且GWT客戶端部署是JavaScript的戰爭,而且JavaScript是不像字節碼罐/文件。

因此,在GWT中,沒有像打包可用於開發和部署的jar那樣的「沒有這種東西」。一些示例和教程將開發和部署文件打包到一個jar文件中 - 但該jar本質上是一個zip文件,您必須首先從開發文件中分解部署文件。

GWT開發罐子=源罐,

GWT部署=的JavaScript和資源的戰爭。

在開始進入GWT開發之前,您應該至少有3-6個月的使用JSP,servlet,HTML和javascript編寫傳統JEE應用程序的經驗。這可以幫助你灌輸服務器端vs客戶端的強烈隔離,戰爭vs jar,從而理解爲什麼GWT是首先發明的。你會理解部署過程。

+1

祝福極客,感謝您花時間嘗試回答我的問題。然而;我想你錯誤地理解了我的問題。問題是關於創建一個GWT庫模塊;一個包含客戶端和服務器組件的模塊,RequestFactory和UiBinder。請注意,將GWT庫模塊打包到JAR中,而將具有入口點的常規GWT模塊打包到WAR中。我試圖打包來自另一個GWT項目的這樣的庫模塊和GWT 失敗。我希望這個解釋有幫助。 – Cengiz 2012-01-02 10:46:18