2009-11-04 63 views
2

我的Enclojure REPL有問題,並使用它的clojure模塊。加載/更改REPL到文件/ ns工作正常與一個孤立的clojure文件,但打破了一個文件,該文件引用另一個clojure文件,我嘗試從我的項目中使用。Enclojure REPL在加載時找不到依賴的clj文件

以下是具體步驟:

  • 創建一個新項目。
  • 創建的Clojure模塊foobar.clj(命名空間com.acme.foobar)
  • 定義哪些在foobar.clj返回一個值的函數:

    (NS com.acme.foobar (:使用COM .acme.othermodule))

    (DEFN myfunc1 [] 「A」)

  • 打開的Netbeans IDE REPL

  • 從foobar.clj的上下文菜單中選擇:

    • 變化REPL到文件/ ns的
    • 負載
  • 從REPL調用(myfunc1)功能。這只是正常:

    com.acme.foobar =>(myfunc1) 「一」

的問題時,當我試圖從指到foobar的其他文件開始。這是我做的:

  • 創建一個新的Clojure模塊othermodule.clj

    (NS com.acme.othermodule)

    (DEFN fromothermodule [] 「B」)

  • 現在嘗試從foobar.clj打電話給我:

    (defn myfunc2 [] (fromothermodule))

  • 從othermodule.clj的上下文菜單中選擇我:

    • 變化REPL到文件/ ns的
    • 負載

爲了使REPL意識到有新的模塊,它應該可以運行。

  • 我對foobar.clj做了同樣的事情,現在引用其他模塊。CLJ,但我得到:

CompilerException java.io.FileNotFoundException:找不到COM/ACME/othermodule__init.class或COM/ACME/othermodule.clj類路徑:(NO_SOURCE_FILE:50) com.acme。 foob​​ar的=>

此錯誤消息來自兩個「更改REPL到文件/ NS」和「加載」

我缺少什麼?我應該採取其他一些技巧來實現這一點嗎?即使是運行 - >清理和構建主項目的絕望措施也無濟於事(無論如何,這當然會使REPL業務變得非常痛苦)。

我正在使用NetBeans 6.7.1和enclojure-plugin-2009-11-3.nbm。

回答

2

得到了Eric Thorsen谷歌的組中的正確的解決方案:

有三種方法來從窗口菜單中的REPL。不要使用其中的任何一種,而應該點擊項目和「啓動項目REPL」 。現在路徑被相應地設置。

1

我的第一個建議是從NetBeans/Enclojure轉到IDEA/La Clojure。 JetBrains最近創建了一個IDE的開源版本,Clojure插件可以正常工作。自從發現這一點以來,我放棄了NetBeans和Enclojure。我發現La Clojure很高興能工作,但當然你的里程可能會有所不同。

從我在NetBeans中完成此任務後,似乎記得Enclojure源代碼駐留在名爲「lib」的子目錄中。我想我解決了一個類似的問題,通過在要加載的文件名稱上找到目錄前綴。可能類似於「../lib/YourName」。我通過試驗和錯誤來處理這個問題,所以我無法將確切的規則和語法聯繫起來。

兩件事情,可以幫助:

  • 您可以運行類似(的println(系統/的getProperty 「java.user.dir」))找出Clojure的認爲它的執行。

  • 您可以像我一樣開始使用絕對路徑,直到找到正確的目錄名稱。像「/home/carl/NetbeansProjects/MyProject/lib/myfile.clj」

+0

謝謝! IDEA甚至沒有跨過我的想法,即使在我的工作機器上安裝了IDEA後,它已經被公開檢查出來了。我一定會嘗試。 我也會嘗試你的NetBeans技巧,但是如果我不能使用「context-menu-over-file-load」選項,可用性會受到很大的影響。 – auramo 2009-11-04 17:24:47

+1

這是令人尷尬的:原來IDEA是帶有「lib」目錄的IDEA。呃,無論如何,我很高興你有正確的答案。 – 2009-11-04 19:02:02

相關問題