【问题标题】:Using custom Java classes in Clojure REPL在 Clojure REPL 中使用自定义 Java 类
【发布时间】:2011-12-06 14:30:06
【问题描述】:

在 Eclipse 中,我想使用 CCW 插件将 clojure 文件加载到 REPL 中。问题是我有一个我自己的 java 类的 import 语句,但显然它不在我的类路径中。

(ns my-clj-ns
  (:import [alg.gen Enumerator]))

我是否必须将要在 Clojure REPL 中使用/测试的每个类都制作成 jar 包?

目前,尝试将我的 clj 加载到 REPL 中会导致错误: “在 Clojure REPL 中加载文件”未正常完成。请查看日志以获取更多信息。 java.lang.NullPointerException

任何帮助将不胜感激。

【问题讨论】:

标签: java clojure classpath


【解决方案1】:

你可以让 leiningen 为你编译这些,

:javac-options {:destdir "classes/"}
:java-source-path "src/main/java" ; location of Java source

选项或手动编译它们并将类文件移动到 classes/ 目录。无需创建 jar。

【讨论】:

    【解决方案2】:

    当您在 ccw repl 中时,您可以按 alt-e 来查看堆栈跟踪。如果您收到 NullPointerException,我认为这不是类路径问题。

    【讨论】:

      【解决方案3】:

      你的代码在我看来不错。

      我怀疑问题出在您的 Eclipse Java Build Path 上,它决定了 Eclipse 在您的应用程序的类路径中包含的内容。

      特别是,如果您的 Java 类位于单独的项目中,则需要将该项目添加到构建路径(右键单击项目/属性/Java 构建路径/项目)或将其打包为 jar。

      当您开始有更复杂的构建要求时,您可能还想开始查看Maven 来为您处理此类事情。首先学习/设置 Maven 很痛苦,但从长远来看它是值得的。

      Leiningen 也是一个很好用的工具,但我个人不使用它,原因如下:

      1. 在命令行上很棒,但与 Eclipse 工作流集成得不是很好
      2. Maven 在 Java 世界中得到更广泛的使用和更好的支持

      【讨论】:

        【解决方案4】:

        如果您想学习如何做到这一点,这里有非常好的指南。

        https://github.com/technomancy/leiningen/blob/master/doc/MIXED_PROJECTS.md

        但总的来说,对于 Java 源代码,有一个如下所示的项目定义。

        (defproject megacorp/superservice "1.0.0-SNAPSHOT"
          :description "A Clojure project with a little bit of Java sprinkled here and there"
          :source-paths      ["src/clojure"]
          :java-source-paths ["src/java"])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-07
          • 1970-01-01
          • 2013-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多