web-dev-qa-db-ja.com

Java JavaScriptへのソースコードをクロスコンパイルする方法は?

Javaソースコードファイルのセットを前提として、手作りのJavaScriptで使用できる1つ以上のJavaScriptファイルにそれらをコンパイルするにはどうすればよいですか?

[〜#〜] gwt [〜#〜] は1つのオプションですが、これまでに見た例はすべて、派手なWebサイトの構築を目的としています。 Javaソースを手作りのJavaScriptと一緒に使用できるJavaScriptに変換するだけの簡単な使用例 十分に文書化されていません

私はこの件について GWTメーリングリストのスレッド を始めましたが、これが実現可能かどうかについては意見が分かれているようです。

一人はとても便利なヒントを教えてくれました。それは GWT-Exporter をチェックアウトすることでした。問題は thisthis はあるものの、ソースコードもドキュメントもすぐに利用できないことです。

編集:GWT-Exporterのソースコードは here です

Java2Script も見ました。しかし、繰り返しになりますが、簡単な使用例を解決する方法の例を見つけることができませんでした。

この問題への最善のアプローチは何ですか?何か足りないものはありますか?

50
Rich Apodaca

GWTを使用する場合、基本的にはUI部分をJavascriptに変換します(Javaを記述するときに提供されるUIウィジェットを使用することを前提としています)。 Javascript内でアクセスできるのは、一部のJavaライブラリのみです。通常、GWTアプリケーションでは、Javaライブラリを頻繁に使用するものはすべてサーバー側で実行され、AJAX(GWTが処理する)としてJavaScriptに接続します。したがって、GWTは必ずしもアプリケーション全体をJavascriptに変換するわけではありません(ただし、Javaライブラリといくつかの機能の使用を制限したい場合は可能です)。

とにかく、このアプローチ(Javascript内からサーバー上で実行されているJavaを呼び出す)が魅力的である場合、1つの素晴らしいオプション [〜#〜] dwr [〜#〜] これにより、基本的に、JavaScriptがサーバーで実行されているJavaクラスのメソッドを直接呼び出すことができます(Webサービスや他のフロントエンドを構築する必要はありません)。あなたが尋ねたのではなく、私は知っています。

より適切には、 gwt-exporterの使用を示すサンプルアプリ のソースコードがあるようです。

10
Jacob Mattison

あなたのユースケースに適合するかどうかはわかりませんが、Java APIを削除し、JavaからJavaScript APIを使用することに同意する場合は、 JSweet 、a = Java TypeScriptの上に構築されたJavaScriptトランスパイラーへ。これにより、何百ものよく型付けされたJavaScript API(DOM、jQuery、アンダースコア、angularjsなど)にアクセスできます。JavaScriptコードを生成し、レガシーのJavaScriptおよびTypeScriptコードと組み合わせてください。

注:JSweetは、レガシーJavaコードおよびレガシーJava APIs)では機能しません 、しかしあなたのユースケースはレガシーコードの再利用について言及していませんでした。

[更新]バージョン1.1以降、JSweetはいくつかのJavaコレクションなどのAPI(Java.util)もサポートするようになりました。そのため、従来のJavaを再利用することが可能です。ある程度コードを記述します。また、Java APIの独自のサポートを追加することも非常に簡単です。

9
Renaud Pawlak

質問はJava JavaScriptへのソースのコンパイルについてですが、 TeaVM がコンパイルされることは言及する価値があると思いますJava JavaScriptにバイトコード。試したことはありませんが、非常に有望です。

8
Katona

他に2つのオプションがあります。調査することと、変換せずに一緒に生活することです。

  1. Java2Javascript

私はこれを試してみたいと思っていました-尋ねられたものに近く見えます。 Webページの引用:

eclipse Java to JavaScriptコンパイラプラグイン、およびJavaScriptバージョンのEclipse標準ウィジェットツールキット(SWT)の実装で、Java.lang。*やJava.util。*などの他の一般的なユーティリティを使用します。 Java2Script Pacemakerにより、SWTベースのリッチクライアントプラットフォーム(RCP)をリッチインターネットアプリケーション(RIA)に変換できます。

限られたJava-必要な依存関係を移植するか、jQueryなどのツールを介して代替を見つける必要があります。

  1. DukeScript

DukeScriptを表示すると、フロントエンドのJavascriptがコンパイルされ、Java背後で、ブラウザのJavascriptから呼び出されます。多かれ少なかれハイブリッドアプローチのようなので、Java Javascriptの豊富なライブラリー私はJavaのブラウザーセキュリティポリシーに違反します。

Javaでのより完全なJavascriptは、Javaランタイムを活用した経験です。ブラウザ環境以外でそれが必要な場合は、JavaでJavascriptを使用します。

  1. ナッシュホーン

これを、Javascriptの基盤としてJavaのリソースを使用する例として考えてみます。Nashorn and JavaFX、豊富なJavaScriptの例運営クライアント。とにかく、Javascriptエンジンを使用するJava Javascript-VMからオブジェクトコードをJava-VMに変換する必要はほとんどありません。

3
will

完全にオントピックではありませんが、 Kotlin はJavaScriptにコンパイルできる100%Java互換の言語です。

IntelliJ IDEAは自動的にJavaをKotlinに変換し、コンパイルしてNodeまたはブラウザで実行することができます。

3
Fabian Zeindl

Javaソースコードファイルのセットを前提として、手作りのJavaScriptで使用できる1つ以上のJavaScriptファイルにそれらをコンパイルするにはどうすればよいですか?

組み込みのJava APIとJava言語機能)とJavaScriptの機能の間に直接的な相関関係はありません。そのため、「コンバーター」を作成しようとすると、基本的な例として、Javaクラスには、直接対応するJavaScriptイディオムがありません。

不完全な変換ツールがあなたのユースケースで機能するかどうかは、ソースコードがなければわかりません。


とは言っても、あなたの問題を解決するための私の提案は、最初に [〜#〜] gwt [〜#〜] を使用することです:デモプロジェクトをセットアップし、ライブラリのソースをドロップして呼び出しますそれをJavaScript側から見て、GWTが何を.jsファイルで出力するかを確認します。ここで他のポスターによって提案された他のツールのいくつかは、同様にチェックアウトする価値があります。

それが実り多いものになり、途中であなたを得るなら、素晴らしい。

そこから、変換の残りの部分を手動で行う必要があります。結局のところ、コードを実際に正しく機能させたい場合は、手動によるレビューが間違いなく必要です。一緒に変換されている一部の単体テストも理想的です。

プロジェクトのソースの大きさは明記していませんが、それが小さい場合(たとえば、1000行未満のコードとしましょう)、手動で完全に変換することもそれほど難しくありません。それよりはるかに大きい場合は、JavaScriptコードとして実際にそれが必要かどうかを確認することをお勧めします。

1
Brad Peabody