2013-03-19 2 views
2

Я новичок в clojure & emacs. Я следую учебнику для clojure & emacs на clojure-doc.org. После того, как я создал свой тестовый проект с lein, начал nrepl в emacs и отредактировал core_test.clj Я попытался скомпилировать.emacs & clojure компиляция ошибка

Тогда я получил это:

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

В чем может быть проблема?

EDIT: Вот файловая структура моего проекта:

. 
./doc 
./doc/intro.md 
./.gitignore 
./README.md 
./project.clj 
./src 
./src/test1 
./src/test1/core.clj 
./test 
./test/test1 
./test/test1/core_test.clj 

EDIT:

Вот мои файлы:

core_test.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))))) 

core.clj

(ns test1.core) 

(defn foo 
    "I don't do a whole lot." 
    [x] 
    (println x "Hello, World!")) 

Это должно дать мне другую ошибку, как я понял, он должен жаловаться синтаксическим анализом аргументов, как я понял. Однако та же ошибка происходит, когда я добавляю это core.clj:

(defn parse-args [args] 
    {}) 
+0

Вы изменили строку пространства имен в верхней части файлов от того, что leiningen надел там? – 2013-03-19 23:13:19

+0

Нет. Я пробовал это несколько раз, создавая разные проекты. Я выполнил шаги на clojure-doc.org http://clojure-doc.org/articles/tutorials/emacs.html –

+0

Я редактировал свой вопрос. –

ответ

1

Позвольте мне дать вам, для справки, что работает для меня:

$ 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<RET>
  • открыть файл test/test1/core_test.clj
  • C-c C-k

Буфер *Messages* говорит:

Loading /Users/marko/dev/clj/test1/src/test1/core.clj... 
#'test1.core/foo 

ли выполнять вам те же самые шаги и получить нежелательный результат?

+0

Ваши шаги дали мне это: 'Loading /home/jakov/dev/PROJECTS/clojure/test1/test/test1/core_test.clj ... # 'test1.core-тест/A-test' Однако , Я должен был подключить emacs nrepl к точному порту repl, работающему в терминале, в соответствии с вашим примером. Означает ли это, что необходимо иметь отдельную терминальную замену? Учебник на данной странице использует nrepl-jack-in без внешнего процесса. Я хотел бы получить эту работу. –

+0

Может ли это иметь отношение к тому, что когда я запускаю emacs, а затем 'M-x nrepl-jack-in', я не рассказывал emacs ничего о пути моего проекта (я только открывал файлы проекта после этого)? –

+0

Да, это, похоже, проблема. Сначала мне нужно открыть файл проекта, поэтому nrepl знает о пути и среде. –

2

Это была проблема:

Emacs кажется, нужно знать пути проекта до начала nrepl с nrepl-jack-in. Если вы, однако, запустите nrepl только с nrepl и подключите его к порту процесса repl, запущенному в отдельном окне терминала, тогда emacs узнает путь ab и т. Д. Из процесса repl, к которому он подключился.

Итак, по порядку вещей, чтобы работать с nrepl-jack-in, что вам нужно сначала открыть файл проекта, как core.clj или core_test.clj, а затем начать nrepl-jack-in.

Nrepl страница на GitHub добавляет следующее: Альтернатива Вы можете использовать C-u M-x nrepl-jack-in указать название проекта LEIN, без посещения какой-либо файл в нем.

+1

nrepl-jack-in не очень привлекателен для меня, я предпочитаю начинать замену заранее. BTW вам не нужно каждый раз вводить порт, вы можете настроить порт по умолчанию в ~/.lein/profiles.clj: '{: user {: repl-options {: port 4001} ...}}' –

+0

Мне как-то нравится иметь все это в одном окне, если это возможно .. –

+0

Есть также проблемы с выходом. Если в обычном окне терминала нет повторного запуска, не будет места, где вы можете контролировать вывод на 'System.out/err', например, ведение журнала консоли,' e.printStackTrace() 'и т. Д. В вы долго соглашаетесь на окно терминала. –

Смежные вопросы