2009-01-13 58 views
46

給定一組Java源代碼文件,我如何將它們編譯爲一個或多個可與手工製作的JavaScript一起使用的JavaScript文件?如何交叉編譯Java源代碼到JavaScript?

GWT是一種選擇,但每到目前爲止,我已經看到了例子旨在建立看中的網站。將Java源代碼轉換爲Javascript的簡單用例,可以與手工製作的JavaScript hasn't been well-documented一起使用。

我開始對這一問題的thread on the GWT mailing list,但是,意見似乎這是否是可行的,甚至混合。

一人給了一個非常有用的技巧,這是檢查出GWT-Exporter。問題是源代碼和文檔都不是現成的,儘管有thisthis

編輯:GWT-出口商的源代碼是here

我也看到了Java2Script。但是,再次,我無法找到如何解決我的簡單用例的例子。

這個問題最好的解決方法是什麼?我錯過了更好的東西嗎?

+0

這個問題討論了一個非常相似的主題:使用GWT將Java庫編譯爲JavaScript。 http://stackoverflow.com/questions/3125556/gwt-to-create-utility-javascript-library – 2013-03-03 04:55:23

+1

非常徹底的問題。你做了很棒的工作,表達你已經探索過的東西。做得很好。 – Spina 2013-10-25 13:09:43

+0

您可以嘗試使用Scala-js https://github.com/lampepfl/scala-js用於您的java項目 - java/scala互操作性http://www.scala-lang.org/old/faq/4) – 2013-11-04 15:02:33

回答

9

當您使用GWT,你基本上是在UI部分轉換爲JavaScript(並假設當你寫你的Java您使用提供的UI控件)。只有一些Java庫可以在Javascript中訪問。通常在GWT應用程序中,任何會大量使用Java庫的東西都會在服務器端運行,並以AJAX(GWT爲您處理)連接到Javascript。因此,GWT不一定會將您的完整應用程序轉換爲Javascript(儘管它可以如果您願意限制您使用Java庫和某些功能)。無論如何,如果這種方法(呼叫Java內運行的Java服務器上的Java)吸引你,一個不錯的選擇是DWR,它基本上允許你的Javascript直接調用服務器上運行的Java類中的方法(沒有你必須建立一個Web服務或其他前端)。不是你問的,我知道。

更貼切,它看起來像有一個sample app demonstrating the use of gwt-exporter源代碼。

+0

This將是一個相當小的,非gui java庫。我沒有看到DWR,看起來它可能對大型項目非常有用。 我甚至沒有看到gwt-exporter項目的源代碼目錄 - 感謝您指出它。那看起來很有希望 – 2009-01-13 19:53:38

+2

gwt-exporter鏈接已停用 – 2012-09-20 13:12:02

1

給定一組Java源代碼文件,我怎麼能編譯它們變成可與手工製作 的JavaScript中使用的一個 或多個JavaScript文件?

內置Java API和Java語言功能與JavaScript之間沒有直接的關聯。所以任何創建「轉換器」的嘗試都是不完整的。作爲一個基本的例子,Java類沒有直接相應的JavaScript慣用法。

不管是不是一個不完整的轉換工具會爲你的使用情況的工作是不可能不知道的源代碼。


這就是說,我的建議,以解決您的問題。將使用GWT第一次嘗試:建立一個示範項目,滴在庫的源代碼和JavaScript端調用它,看看GWT輸出在它的.js文件中。其他海報推薦的其他一些工具也值得一試。

如果這是富有成效的,並讓你成爲你的一部分,那很好。

從那裏,你需要/想要手動完成其餘的轉換。畢竟,假設您希望代碼實際上正常工作,手動審查肯定會按順序進行。一些單元測試與它一起轉換也是理想的。

你沒有說明你的項目的來源有多大,但是如果它很小(比方說少於一千行的代碼),即使是手工完成的轉換也不是非常困難。如果它比這個大得多,我會建議你回顧一下,如果你確實想要JavaScript代碼。

3

下面是另外兩個選項,要看的東西和第三個選項不轉換,只是住在一起。

  1. Java2Javascript

我一直想嘗試了這一點 - 看起來更接近什麼被問。引用網頁:

Eclipse Java to JavaScript編譯插件和Eclipse Standard Standard Widget Toolkit(SWT)的JavaScript版本與其他常用實用工具(如java.lang。*和java.util。*)的實現。 。您可以通過Java2Script Pacemaker將基於SWT的富客戶機平臺(RCP)轉換爲富Internet應用程序(RIA)。

一個有限的Java在Javascript中的經驗 - 你需要你的端口所需的依賴,或通過像jQuery工具尋找替代品等

  • DukeScript
  • 當我查看DukeScript時,它會編譯一些前端Javascript並從瀏覽器的Javascript調用Java。它似乎或多或少是一種混合的方法,所以你可以使用Javascript的Java豐富的庫。我將陷入Java的瀏覽器安全策略之中。

    利用Java運行時的Java體驗的更完整的Javascript。如果我想在瀏覽器環境之外使用Java,

    1. Nashhorn

    認爲這是使用Java的資源爲基礎爲Javascript的示例:Nashorn and JavaFX,作爲一個豐富的Javascript的示例操作的客戶端。無論如何,在Java內部的JavaScript引擎中,您不需要在Javascript-VM與對象代碼之間轉換Java-VM。

    7

    雖然問題是關於將Java源代碼編譯爲JavaScript,但我認爲值得一提的是有TeaVM將Java字節碼編譯爲JavaScript。我從來沒有嘗試過,但看起來很有希望。

    8

    我不確定它是否適合您的使用案例,但是如果您同意放棄Java API並使用Java API中的JavaScript API,那麼您可以使用JSweet,這是一個建立在TypeScript頂部的Java to JavaScript Transpiler。它使您可以訪問數百種類型良好的JavaScript API(DOM,jQuery,下劃線,angularjs等)。它生成JavaScript代碼,您可以將其與傳統JavaScript和TypeScript代碼混合使用。

    注意:JSweet將而不是適用於遺留Java代碼和遺留Java API,但您的用例並未提及重用遺留代碼。

    [更新]從版本1.1開始,JSweet現在還支持一些Java API,如Collections(java.util)。因此,可以在一定程度上重用遺留Java代碼。增加對Java API的支持也很簡單。

    3

    不完全在話題上,但Kotlin是可以編譯爲JavaScript的100%Java兼容語言。

    IntelliJ IDEA可以自動將Java轉換爲Kotlin並將其編譯爲在節點或瀏覽器上運行。