我正在考虑开始使用(不玩)Clojure。有没有有用的指南?我不是在询问lein,javac或任何其他“小型”手动工具。我需要知道如何在同一个项目中使用eclipse中的Java和Clojure源代码。如何在没有编译错误的情况下让他们互相调用?如何配置maven?如何建立完全富有成效的开发环境?现在甚至可能吗?哪些插件可能有用?从哪里开始?
答案 0 :(得分:14)
我有一个完全正常的生产设置,Eclipse,Maven和Clojure目前工作得非常好。希望它有助于作为Java IDE中良好的多语言设置的一个例子。
我不使用leiningen - 根本没有反对lein - 它在纯粹的Clojure / CLI世界中非常漂亮和理想。但是我发现使用IDE可以更好地使用纯Maven在多语言Java + Clojure环境中工作,因为工具集成要好得多。此外,从生态系统/受众/社区的角度来看,如果您希望Java世界的人能够构建您的源代码,那么如果您直接使用Maven,则会减少混淆。
这是我的设置:
实际上我如何管理/设置项目本身:
src/main/java
和src/main/clojure
.clj
文件捆绑在任何jar中,并且可以在运行时动态加载/运行。public static void main(...)
在Java端创建入口点,但很快就调用Clojure代码。请参阅calling Clojure from Java上的此博文。最后一些针对多语言Java + Clojure的编码技巧
clojure.lang.IFn
。这样,您的Java对象就可以充当Clojure代码中的第一类函数。这是一个混合Java和Clojure源的示例项目:
我还写了一个小型库(clojure-utils),其中包含一些用于从Java调用Clojure的示例代码,您可能会发现它很有用。
答案 1 :(得分:11)
尽管你对莱宁根有所了解,但我建议你去看看。 Leiningen支持Java编译,因此在一个项目中组合java和clojure源不是问题。
逆时针插件,Eclipse的clojure插件,可以与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)))
进一步阅读:
答案 2 :(得分:0)
您也可以尝试“Funky”框架。它将完全将您的Clojure和Java代码分开。只需查看https://github.com/windler/Funky
即可