web-dev-qa-db-ja.com

Clojureデスクトップアプリの出荷は現実的ですか?

現在、デスクトップJavaアプリケーションを出荷しています。これは単純な古いJava 5 Java/Swingアプリであり、これまでのところすべてがうまく機能しています。 Java 5は、Java 6を持たないOS Xバージョン/コンピューターを使用していたユーザーがいるため、5がターゲットになりました(この制限は間もなく解除され、新しいJavaに切り替えてユーザーを放棄する可能性があります) Javaで立ち往生5)。

Clojureにすぐに慣れてきましたが、Clojure-to-JavaおよびJava-to-Clojureの多くはまだ行っていません。Javaアプリケーション?

私が出荷しているアプリケーションは現在約12 MBで、すべての。jarが含まれているため、Clojureを追加してもそれほど問題にはなりません。

私の計画は、Clojure呼び出しJava APIを使用することです。私のアプリケーションはすでにいくつかの独立したjarに分割されています。

JavaからClojureを正しく呼び出すことは、ClojureからJavaコードを呼び出すよりも難しいことを理解しているので、基本的にすべてのUI(UIの一部、Swingコンポーネントと自作のBufferedImagesの混合の必要性)を書き換えます網膜ディスプレイの台頭のためにとにかく書き直されるべきです)、そしてClojureからのすべての「配線」を行います。

それが私が直面している問題です。Clojureデスクトップアプリを出荷することは現実的ですか? (確かにあまり普及していないようですが、プレーンなJavaデスクトップアプリを出荷することもそれほど一般的ではなく、とにかくやっています)

技術的には、何をする必要がありますか? (Javaアプリの出荷と比較して)

26
Cedric Martin

はい、それは完全に現実的です-多くの人々はまだそうしているようには見えませんが、それは時間の問題だと思います(Clojureは結局かなり新しいです!)

私は個人的に、Swingアプリケーション(https://github.com/mikera/ironclad)として実行されるオープンソースのゲームをClojureで書いたので、役立つかもしれないいくつかの経験を共有します。

  • 平均すると、おそらくJava APIをClojureで呼び出す必要があります。これは一般的な常識です-Javaにはすばらしいライブラリがすべてあります。Clojureは物事を接着するためのより生産的な言語です。
  • コードのClojure部分を起動するmain(...)メソッドを使用して、Javaベースの「ローダー」を記述したい場合があります。特に、これはClojureコードをAOTコンパイルする必要がないことを意味します。ここにコード例: https://github.com/mikera/ironclad/blob/master/src/main/Java/ic/IronClad.Java
  • Clojureコードをロード/コンパイルするための追加の起動時間を考慮して、アプリケーションの初期化中にスプラッシュスクリーンを表示するなどの操作を実行する必要があります。おそらく、通常のアプリの起動時間に1〜2秒追加されます。これは、ユーザーがフィードバックを評価するのに十分な時間です。あなたが賢いなら、他のものがバックグラウンドでロードしている間にUI全体を実際にスローすることができますが、これにはいくつかの注意が必要であり、並行性をテストするかもしれません:-)
  • JavaとClojureは、バックグラウンドとフォワードをかなり透過的に呼び出すことができるため、比較的自由に組み合わせることができます。 JavaにClojureを呼び出させる場合の唯一の問題は、Javaがコンパイル時に呼び出すクラス/インターフェースを知りたいということです。 Clojureコードに reify を使用して、あらかじめコンパイルされたJavaインターフェイスを動的に実装することをお勧めします。
  • Eclipse/Mavenを使用して、ClojureとJavaの両方のコードを含む単一のjarにアプリを開発してパッケージ化するのは非常に簡単です。 Clojureコードは単にsrc/main/resourcesに入れることができ、実行時にロード/コンパイルされます。
  • 必要に応じて、 seesaw のようなClojure GUIラッパーを使用できます。なかなか良さそうです。主にSwingを使って手間のかかることをしたかったので、追加の抽象化レイヤーが必要だと感じなかったので、使用しないことにしました。
28
mikera