2012-04-07 82 views
2

我想從現有的Java項目生成Javascript代碼(original question here)。gwt-exporter不生成代碼(Java to Javascript)

我將GWT與gwt-exporter結合使用。在我進行GWT編譯後,我的任何類型都不會出現在任何生成的代碼中。

GameEntryPoint.java

package game.client; 

import org.timepedia.exporter.client.ExporterUtil; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.JavaScriptObject; 

public class GameEntryPoint implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     ExporterUtil.exportAll(); 
    } 

} 

RoadServer.java

package game.client; 

import org.timepedia.exporter.client.Exportable; 

public class RoadServer implements Exportable { 
    int _index; 
    int _id; 
    public RoadServer(int index,int id){ 
     this._id=id; 
     this._index=index; 
    } 
} 

還有就是RoadServerwar/目錄的任何地方沒有引用(grep -Ri RoadServer war/*比賽只.class文件)。另外,爲了確保,我在瀏覽器(Firefox)中打開了war/GameEntryPoint.html文件,Firebug僅將game_GameEntryPoint看作以game開頭的內容。

任何想法,爲什麼這不工作?

P.S.我也試過指定@Export@Export("RoadServer")@ExportPackage("game")。什麼都沒有

回答

3

啊哈,所以看起來像是ExporterUtil.exportAll()中的一些bug。如果類具有非空的構造函數或沒有任何方法,則不會導出它。但是,如果你有@Export註釋添加一個空的構造函數來導出類和註釋非空的構造就開始工作

您也可以手動導出類:

public class GameEntryPoint implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     ExporterUtil.exportAll(); 
     GWT.create(RoadServer.class); //forcing to export road server 
    } 

} 

但要知道,這種方式可以有時候出口有錯誤的課

+0

+1爲好的答案! – GingerHead 2012-04-07 22:51:37

+0

謝謝。我不得不在構造函數和類上添加'@ Export'註釋以使其正常工作,但它終於實現了。另外,我有一個類的方法返回一個自定義類型的數組。改變這些來填充給定的數組也修復了這個問題。遺憾的是gwt-exporter上的文檔沒有列出這些問題。 – Yuval 2012-04-07 22:54:35

+1

可導出的類需要一個無參數構造函數,或者一個接受JavaScriptObject的構造函數。如果它出現編譯時錯誤或警告,如果它不能導出出於此原因標記爲@Export的類,那將會很好。 – funkybro 2012-04-08 08:45:27