Java 行政会议;clojure编译错误
我是clojure&emacs的初学者。 我正在clojure-doc.org上学习clojure和emacs的教程。 在我与lein创建了测试项目之后,在emacs和 编辑了我试图编译的core_test.clj 然后我得到了这个:Java 行政会议;clojure编译错误,java,clojure,leiningen,emacs24,Java,Clojure,Leiningen,Emacs24,我是clojure&emacs的初学者。 我正在clojure-doc.org上学习clojure和emacs的教程。 在我与lein创建了测试项目之后,在emacs和 编辑了我试图编译的core_test.clj 然后我得到了这个: Loading /home/jakov/dev/PROJECTS/clojure/test1/test/test1/core_test.clj... FileNotFoundException Could not locate test1/core__init.c
Loading /home/jakov/dev/PROJECTS/clojure/test1/test/test1/core_test.clj...
FileNotFoundException Could not locate test1/core__init.class or test1/core.clj on
classpath: clojure.lang.RT.load (RT.java:432)
我的项目是由leiningen 2创建的,作者是lein new test1
。
我用的是emacs24
这里可能有什么问题
编辑:
以下是我的项目的文件结构:
.
./doc
./doc/intro.md
./.gitignore
./README.md
./project.clj
./src
./src/test1
./src/test1/core.clj
./test
./test/test1
./test/test1/core_test.clj
编辑:
这是我的档案:
核心测试.clj
(ns test1.core-test
(:use clojure.test
test1.core))
(deftest pairs-of-values
(let [args ["--server" "localhost"
"--port" "8080"
"--environment" "production"]]
(is (= {:server "localhost"
:port "8080"
:environment "production"}
(parse-args args)))))
(ns test1.core)
(defn foo
"I don't do a whole lot."
[x]
(println x "Hello, World!"))
core.clj
(ns test1.core-test
(:use clojure.test
test1.core))
(deftest pairs-of-values
(let [args ["--server" "localhost"
"--port" "8080"
"--environment" "production"]]
(is (= {:server "localhost"
:port "8080"
:environment "production"}
(parse-args args)))))
(ns test1.core)
(defn foo
"I don't do a whole lot."
[x]
(println x "Hello, World!"))
这会给我另一个错误,据我所知,
据我所知,它应该抱怨parse args。
但是,当我将其添加到core.clj时,同样的错误也会发生:
(defn parse-args [args]
{})
让我给你一些对我有用的参考:
$ lein new test1
Generating a project called test1 based on the 'default' template.
To see other templates (app, lein plugin, etc), try `lein help new`.
$ cd test1
$ lein repl
nREPL server started on port 4001
REPL-y 0.1.9
Clojure 1.4.0
Exit: Control+D or (exit) or (quit)
Commands: (user/help)
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
(user/sourcery function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
(user/clojuredocs name-here)
(user/clojuredocs "ns-here" "name-here")
user=>
在Emacs中:
M-x nrepl
- 打开文件
test/test1/core\u test.clj
C-C-k
*消息*
缓冲区显示:
Loading /Users/marko/dev/clj/test1/src/test1/core.clj...
#'test1.core/foo
您是否执行了完全相同的步骤并得到了不理想的结果?这就是问题所在:
在使用nrepl插孔启动nrepl之前,emacs似乎需要知道项目的路径。
但是,如果您仅使用nrepl
启动nrepl,并将其连接到在单独的终端窗口中启动的repl进程的端口,则emacs将从其连接到的repl进程中知道ab out path等
因此,为了使用nrepl-jack-in
,您需要首先打开一个项目文件,如core.clj
或core\u-test.clj
,然后启动nrepl-jack-in
github上的Nrepl页面添加了以下内容:
或者,您可以使用C-u M-x nrepl jack in
指定lein项目的名称,而不必访问其中的任何文件。您是否更改了leiningen在文件顶部的名称空间行?没有。我通过创建不同的项目尝试了多次。我按照clojure-doc.org上的步骤编辑了我的问题。它是否只使用命令行中的lein工作?如果您执行lein-run
或lein-test
操作,是否有效,或者您是否收到这些错误?需要知道这是否是emacs中nrepl的一个普遍问题或特定问题。只是想澄清一下……您使用的是低级lisp、swank+slime还是nrepl?您的步骤告诉我:load/home/jakov/dev/PROJECTS/clojure/test1/test/test1/core\u test.clj…#test1.core test/a-test
然而,根据您的示例,我必须将emacs nrepl连接到终端中运行的repl的确切端口。这是否意味着有必要运行单独的终端repl?给定页面上的教程使用nrepl插孔,无需外部进程。。我想让它工作起来。这是否与我启动emacs,然后M-x nrepl jack in
时,我没有告诉emacs我项目的路径有关(我只是后来才打开项目文件)?是的,这似乎是个问题。我需要先打开一个项目文件,以便nrepl知道路径和环境。nrepl-jack-in对我来说不是很有吸引力,我更喜欢提前启动repl。顺便说一句,您不需要每次都输入端口,您可以在~/.lein/profiles.clj:{:user{:repl options{:port 4001}…}
中配置默认端口。输出也有问题。如果您没有在常规的终端窗口中启动repl,那么就没有地方可以监视到System.out/err
的输出,例如控制台日志记录,e.printStackTrace()
等。从长远来看,您满足于终端窗口。但它不都显示在消息缓冲区中吗?或者在nrepl缓冲区中?我对jack-in没有足够的经验,但我不希望它出现在消息中,因为这是原始Java输出。nrepl缓冲区将显示对*out*
(例如(println…
)的写入,该级别高于原始输出。另一件事是,由于性能问题,您确实不希望在Emacs缓冲区中有大量日志输出。