Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 行政会议;clojure编译错误_Java_Clojure_Leiningen_Emacs24 - Fatal编程技术网

Java 行政会议;clojure编译错误

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

我是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.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缓冲区中有大量日志输出。