Clojure を使い始めようと思っています (遊んでいません)。役立つガイドはありますか?lein、javac、またはその他の「小さな」手動ツールについて質問しているわけではありません。Java と Clojure のソースを同じプロジェクトの Eclipse に含める方法を知る必要があります。コンパイルエラーなしでお互いを呼び出す方法は? Mavenの設定方法は?完全に生産的な開発環境をセットアップするには? 現時点でも可能ですか?どのプラグインが役に立ちますか? どこから始めれば?
3 に答える
私は、Eclipse、Maven、および Clojure を使用して完全に機能する本番環境を用意しており、現時点では非常にうまく機能しています。Java IDE 内での優れた多言語セットアップの例として役立つことを願っています。
私は leiningen を使用しません - lein に反対するものはまったくありません - 純粋な Clojure/CLI の世界では非常に素晴らしく、理想的です。しかし、ツールの統合がはるかに優れているため、純粋な Maven は、IDE を使用した多言語 Java+Clojure 環境での作業に適していることがわかりました。また、エコシステム/オーディエンス/コミュニティの観点から、Java の世界の人々がソースをビルドできるようにしたい場合は、Maven を直接使用するだけで、混乱が大幅に減少します。
これが私のセットアップです:
- メイン IDE としての Eclipse 4.2
- 反時計回りの Eclipse プラグイン - 非常に優れており、REPL、Clojure 編集などを処理します。
- すべてのプロジェクトを管理するために Maven を使用していました (私は組み込みの Eclipse Maven 統合を主に使用しますが、CLI バージョンも使用する場合があります)。
- プロジェクトのClojure部分でJUnitテストを実行できるようにするために使用されるcljunit
- SCM および継続的インテグレーションに使用される Github / Travis CI は、Eclipse の組み込み EGit チーム プロバイダーを使用してアクセスされます
実際にプロジェクト自体をどのように管理/設定するかという点では:
- 標準の Maven ディレクトリ レイアウトを使用して、Maven ですべてを構成します。Polyglot Java+Clojure プロジェクトには通常、
src/main/java
とsrc/main/clojure
- Clojure は、他の Java ライブラリと同様に、単なる Maven 依存関係です。
- Maven セットアップで、Clojure ソース ディレクトリをリソース ディレクトリにします。これは、
.clj
ファイルが任意の jar にバンドルされ、実行時に動的にロード/実行できることを意味します。 - 私は通常、いつものように Java 側でエントリ ポイントを作成します
public static void main(...)
が、Clojure コードを非常に迅速に呼び出します。Java からの Clojure の呼び出しに関するこのブログ投稿を参照してください。
最後に、ポリグロット Java+Clojure のコーディングのヒントをいくつか紹介します。
- Java は低レベルのデータ構造、ライブラリ、およびアルゴリズムに適しているのに対し、Clojure は物事を統合してコードを「接着」するのに優れていることがわかりました。
- Clojure による Java の呼び出しは、通常、その逆よりも簡単でエレガントです。また、通常は依存関係をそのようにフローさせたいため (高レベルのコードが低レベルのコードを呼び出す)、これは理にかなっています。
- すべての Java クラスを不変にすると、最小限の労力で Clojure の世界で非常にうまく機能します。
- 場合によっては、1 つまたは複数の Java クラスに Clojure インターフェイスの一部を実装する価値があります
clojure.lang.IFn
。たとえば、特にそうです。このようにして、Java オブジェクトは Clojure コードでファースト クラスの関数として機能できます。
Java と Clojure のソースを組み合わせたプロジェクトの例を次に示します。
また、Java から Clojure を呼び出すサンプル コードを含む小さなライブラリ ( clojure-utils ) も作成しました。
ライニンゲンについてのあなたの口調にもかかわらず、私はそれを見ることをお勧めします. Leiningen は Java コンパイルをサポートしているため、1 つのプロジェクトで Java と clojure のソースを組み合わせても問題ありません。
Eclipse 用の clojure プラグインである Counterclockwise プラグインは、leiningen プロジェクト ファイル (project.clj) で動作します。そのため、Eclipse 内では、project.clj で適切なものを定義することにより、依存関係管理と Java コンパイルがすべて処理されます。leiningen を個別にインストールしたり、コマンド ラインからコマンドを実行したりする必要はありません。
project.cljで、次のように:java-source-paths を設定します。
:java-source-paths ["src/main/java"]
パッケージ src/main/java にクラス Foo を入れます:
package main.java;
public class Foo {
public static final String value = "Michiel";
}
clojure ソース ファイルのどこかにこの関数を定義すると、呼び出されたときに "Michiel" が出力されます。
(defn foo
"I don't do a whole lot."
[]
(println (main.Foo/value)))
参考文献:
フレームワーク「Funky」を試すこともできます。Clojure と Java コードを完全に分離します。https://github.com/windler/Funkyをご覧ください