gpt4 book ai didi

java - 现实世界中的 Clojure 和 Java 互操作

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:45 24 4
gpt4 key购买 nike

我正在考虑开始使用(而不是玩弄)Clojure。有什么有用的指南吗?我不是在询问 lein、javac 或任何其他“小型”手动工具。我需要知道如何在同一项目的 Eclipse 中拥有 Java 和 Clojure 源代码。如何让他们相互调用而不出现编译错误?如何配置 maven ?如何建立充分生产的开发环境?目前有可能吗?哪些插件可能有用?从哪里开始?

最佳答案

我有一个使用 Eclipse、Maven 和 Clojure 的完全可用的生产设置,目前运行得非常好。希望它有助于作为 Java IDE 中良好的多语言设置示例。

我不使用 leiningen - 根本不反对 lein - 它在纯 Clojure/CLI 世界中非常好和理想。但我发现纯 Maven 更适合在带有 IDE 的多语言 Java+Clojure 环境中使用,因为工具集成要好得多。此外,从生态系统/受众/社区的角度来看,如果您希望来自 Java 世界的人们能够构建您的源代码,那么如果您直接使用 Maven,将会减少很多混淆。

这是我的设置:

  • Eclipse 4.2 作为主要 IDE
  • Counterclockwise Eclipse 插件 - 非常好,负责 REPL、Clojure 编辑等。
  • Maven 用于管理所有项目(我主要使用内置的 Eclipse Maven 集成,但偶尔也会使用 CLI 版本)
  • cljunit用于使 JUnit 测试能够在项目的 Clojure 部分上运行
  • Github/Travis CI 用于 SCM 和持续集成,使用 Eclipse 中的内置 EGit 团队提供程序访问

就我实际如何管理/设置项目本身而言:

  • 我使用 Maven 配置所有内容,使用标准的 Maven 目录布局。多语言 Java+Clojure 项目通常同时具有 src/main/javasrc/main/clojure
  • Clojure 只是一个 Maven 依赖项,就像任何其他 Java 库一样。
  • 我在 Maven 设置中将 Clojure 源目录变成了资源目录。这意味着 .clj 文件被捆绑在任何 jar 中,并且可以在运行时动态加载/运行。
  • 我通常像往常一样使用 public static void main(...) 在 Java 端创建入口点,但调用 Clojure 代码的速度非常快。在 calling Clojure from Java 上查看此博客文章.

最后是多语言 Java+Clojure 的一些编码技巧

  • 我发现 Java 更适合低级数据结构、库和算法,而 Clojure 更适合将事物集成在一起和“粘合”代码。
  • Clojure 调用 Java 通常比相反的方式更容易/更优雅。这也是有道理的,因为您通常希望依赖关系以这种方式流动(高层代码调用低层代码)
  • 如果您将所有 Java 类设为不可变,那么它们在 Clojure 世界中的表现会非常好,而且工作量很小。
  • 有时值得让一个或多个 Java 类实现某些 Clojure 接口(interface),例如特别是 clojure.lang.IFn。这样,您的 Java 对象就可以充当 Clojure 代码中的一流函数。

这是一个混合了 Java 和 Clojure 源代码的示例项目:

我还编写了一个小型库 ( clojure-utils),其中包含一些用于从 Java 调用 Clojure 的示例代码,您可能会发现它们很有用。

关于java - 现实世界中的 Clojure 和 Java 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com