簡體   English   中英

Java到JavaScript使用GWT編譯器

[英]Java to JavaScript using GWT compiler

我編寫了一些Java代碼,我想將其轉換為JavaScript。 我想知道是否可以使用GWT編譯器將提到的Java代碼編譯成JavaScript代碼, 保留方法,變量和參數的所有名稱 我嘗試使用-draftCompile關閉代碼優化來編譯它,但是方法名稱被破壞了。 如果GWT編譯器不能這樣做,可以使用其他一些工具嗎?

更新

Java代碼只依賴於GWT模擬類,因此GWT編譯器肯定能夠處理它。

更新2

這個Java方法:

public String method()

翻譯成這個JavaScript函數:

function com_client_T_$method__Lcom_client_T_2Ljava_lang_String_2()

使用編譯器選項:

-style DETAILED
-optimize 0
-draftCompile

所以名稱不能保留。 但有沒有辦法控制它們的變化?

澄清

比如說,您有一個用Java編寫的排序算法(或其他一些簡單的Maths實用程序)。 方法sort()采用整數數組。 並在排序的數組中返回這些整數。 現在說,我有Java和JavaScript應用程序。 我想用Java編寫這個方法一次,通過GWT編譯器運行它,並保持方法名稱相同,或者以可預測的方式更改它,這樣我就可以檢測它並知道如何將其更改回排序( )。 然后我可以將該代碼放在我的JavaScript應用程序中並使用它。 如果Java版本發生變化,我也可以自動重新生成它。 我在技術上有一個非常好的理由,我在高層次上理解GWT的概念,我只是在尋找這一點的答案。

結論

主要問題的答案是否定的 雖然方法名稱可以在某種程度上保留,但其主體不可用。 其中的方法調用分散在整個生成的文件中,因此,它們不能在JavaScript庫中使用,這是本主題的重點。

雖然您可以將編譯器設置為輸出“漂亮”代碼,但我建議您為要從GWT項目外部調用的類編寫導出函數。 我相信GWT文檔中的某個地方詳細說明了如何做到這一點,但我找不到它,所以我剛剛創建了一個例子。

class YourClass {
    public YourClass() {
        ...
    }

    public void yourMethod() {
        ...
    }

    public static YourClass create() {
        return new YourClass();
    }

    public final static native void export() /*-{
          $wnd.YourClass = function() {
              this.instance = new @your.package.name.YourClass::create()()
          }

          var _ = $wnd.YourClass.prototype;
          _.yourMethod = function() {this.instance.@your.package.name.YourClass::yourMethod()()}
    }-*/;
}

編輯

詳細說明,您的代碼將像平常一樣進行模糊處理,但由於導出功能,您可以輕松地在外部引用這些功能。 不必在JavaScript中重寫Java類中的任何內容。 您只能在JavaScript中編寫引用,因此您可以這樣做:

var myInstance = new YourClass();
myInstance.yourMethod();

當然,您必須從GWT應用程序中的某個位置(最有可能在您的EntryPoint中)調用靜態導出方法才能使其工作。

有關從JavaScript引用Java方法的更多信息: http//code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields

也許我可以回答你的第二個問題:“如果GWT編譯器不能這樣做,可以使用其他工具嗎?”

我現在使用Java2Script已經有一段時間了,也是在相當大的項目上。 與本機JavaScript集成很好,名稱被保留,並且在一段時間之后,甚至可以輕松地將生成的JavaScript(在瀏覽器調試器中)與原始Java代碼匹配。

你做

否 - 這是GWT編譯器無法實現的,因為構建GWT編譯器是為了從Java生成優化且性能非常好的JavaScript。

最大的優點是,您可以在Java中維護您的項目並使用GWT將其編譯為JavaScript。 因此,無需阻止JavaScript結果中的變量名和方法名,因為所有更改和工作都在JAVA源中完成。

在GWT的JavaScript輸出中工作並不是那么容易,而且真的很多工作!

更新

通過David的一絲暗示,我找到了Compiler-Option“ -style ”。 您可以嘗試使用以下選項:

-style=PRETTY -optimize=0

我不知道這是否真的會產生“人類可讀”的代碼。 我認為它不會,因為GWT框架仍然是生成的JavaScript的一部分,因此很難對JavaScript結果進行更改。 試試讓我們知道......

您可以通過編寫調用它的內聯JavaScript來“導出”您的函數,並且有一個工具gwt-exporter在您使用@Export和類似注釋類和方法時自動執行此操作。 更多信息: https//code.google.com/p/gwtchismes/wiki/Tutorial_ExportingGwtLibrariesToJavascript_en

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM