【问题标题】:Enclojure REPL can't find dependent clj file on LoadEnclojure REPL 在加载时找不到依赖的 clj 文件
【发布时间】:2009-11-04 16:02:44
【问题描述】:

我在使用 Enclojure REPL 并从中使用 clojure 模块时遇到问题。 Load/Change REPL to file/ns 适用于隔离的 clojure 文件,但会中断一个文件,该文件引用了我尝试从我的项目中使用的另一个 clojure 文件。

以下是具体步骤:

  • 创建一个新项目。
  • 创建一个 clojure 模块 foobar.clj(命名空间 com.acme.foobar)
  • 在 foobar.clj 中定义一个返回值的函数:

    (ns com.acme.foobar (:使用 com.acme.othermodule))

    (defn myfunc1 [] “一”)

  • 打开 Netbeans IDE REPL

  • 从 foobar.clj 的上下文菜单中选择:

    • 将 REPL 更改为 file/ns
    • 加载
  • 从 REPL 调用 (myfunc1) 函数。这工作得很好:

    com.acme.foobar=> (myfunc1) “一个”

当我尝试从 foobar 引用其他文件时,问题就开始了。这是我的工作:

  • 创建一个新的clojure模块othermodule.clj

    (ns com.acme.othermodule)

    (defn fromothermodule [] "b")

  • 现在尝试从 foobar.clj 调用它:

    (defn myfunc2 [] (来自其他模块))

  • 我从 othermodule.clj 的上下文菜单中选择:

    • 将 REPL 更改为 file/ns
    • 加载

为了让 REPL 意识到它应该能够运行新模块。

  • 我对现在引用 othermodule.clj 的 foobar.clj 做同样的事情,但我明白了:

CompilerException java.io.FileNotFoundException: 无法在类路径上找到 com/acme/othermodule__init.class 或 com/acme/othermodule.clj: (NO_SOURCE_FILE:50) com.acme.foobar=>

此错误消息来自“Change REPL to file/ns”和“Load”

我错过了什么?我应该做一些其他的技巧来实现这一点吗?即使是 Run->Clean and Build the main project 的绝望措施也无济于事(这当然会使 REPL 业务非常痛苦)。

我使用的是 NetBeans 6.7.1 和 enclojure-plugin-2009-11-3.nbm。

【问题讨论】:

    标签: clojure enclojure


    【解决方案1】:

    从 google 组中的Eric Thorsen 获得正确的解决方案:

    有三种方法可以从窗口菜单创建 REPL。不要使用其中任何一个,而是正确的 单击项目和“启动项目 REPL”。现在相应地设置了路径。

    【讨论】:

      【解决方案2】:

      我的第一个建议是从 NetBeans/Enclojure 迁移到 IDEA/La Clojure。 JetBrains 最近创建了他们的 IDE 的开源版本,并且 Clojure 插件在其中运行良好。发现这一点后,我放弃了 NetBeans 和 Enclojure。我觉得在 La Clojure 工作很愉快,但当然你的工作量可能会有所不同。

      当我在 NetBeans 中执行此操作时,我似乎记得 Enclojure 源代码驻留在一个名为“lib”的子目录中。我想我通过摆弄要加载的文件名上的目录前缀解决了类似的问题。可能类似于“../lib/YourName”。我通过反复试验来解决这个问题,所以我无法关联确切的规则和语法。

      两件事可能会有所帮助:

      • 您可以运行类似 (println (System/getProperty "java.user.dir")) 的命令来找出 Clojure 认为它从哪里执行。

      • 您可以像我一样开始使用绝对路径,直到找到正确的目录名称。类似于 "/home/carl/NetbeansProjects/MyProject/lib/myfile.clj" .

      【讨论】:

      • 谢谢! IDEA 甚至没有出现在我的脑海中,即使我在开源后将其安装在我的工作机器上以进行检查。我一定会试试的。我也会尝试你的 NetBeans 技巧,但如果我不能使用“context-menu-over-file-load”选项,可用性会受到很大影响。
      • 这很尴尬:原来 IDEA 是带有“lib”目录的那个。嘿,我很高兴你得到了正确的答案。
      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多