Вопрос по clojure, leiningen – Почему Java жалуется, что пространство имен не найдено?

5

Я пытаюсь настроить среду сборки lein в Windows 7, скопировав файлы из успешной среды сборки в Linux. У меня есть Maven и JDK установлены вместе с Lein.

HOME указывает наc:\Users\cnorton где находятся каталоги maven.

Я получаю эту ошибку при попытке запустить lein repl или lein compile и не могу понять, что я делаю неправильно.

Вызывается: java.lang.Exception: пространство имен & quot; repl-test.core & apos; не найден после загрузки "/ repl_test / core";

Вот проект.

(defproject repl-test "0.0.1-SNAPSHOT"
  :description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-csv/clojure-csv "1.2.4"]
                 [org.clojure/tools.cli "0.1.0"]
                 [clj-http "0.1.3"]]
   :aot [repl-test.core]
   :main repl-test.core)

Вот первая часть src / repl_test / core.clj

(ns repl-test.core
  (:gen-class)
  (:use clojure.contrib.command-line)
  (:require [clojure.contrib.string :as cstr])
  (:require [clojure.contrib.trace :as ctr])
  (:require [clojure.string :as sstr])
  (:use clojure-csv.core))

Я был бы очень полезен, если бы кто-то мог опубликовать в качестве ответа файл project.clj и заголовок core.clj, который позволяет проекту быть основным.

вы намеренно используете библиотеки clojure-contrib из 1.2? установлена переменная HOME env? Arthur Ulfeldt
Вы можете получить больше интерактивной помощи по #clojure на freenode Arthur Ulfeldt
Дом установлен / home / cnorton в Linux. Я установил его в каталог c: \ projects \ clojure в Windows. octopusgrabbus
Я могу удалить clojure-contrib, и только JAVA_HOME установлен. Я пойду посмотрю настройки HOME. octopusgrabbus
попробуйте c: \ Users \ username возможно maven не находит репо? Arthur Ulfeldt

Ваш Ответ

1   ответ
6

- & quot; в именах папок и пространствах имен они фактически преобразуются в & quot; _ & quot; но не во всех местах.

Следующее может или не может работать для вас. Я получил ваш скелетный проект, работающий с:

(defproject st1 "1.0.0-SNAPSHOT"
:description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-csv/clojure-csv "1.2.4"]
                 [org.clojure/tools.cli "0.1.0"]
                 [clj-http "0.1.3"]]
                 :aot [repl_test.core]
                 :main repl_test.core)

Тот же файл clj, что и у вас:

 (ns repl_test.core
  (:gen-class)
  (:use clojure.contrib.command-line)
  (:require [clojure.contrib.string :as cstr])
  (:require [clojure.contrib.trace :as ctr])
  (:require [clojure.string :as sstr])
  (:use clojure-csv.core))

И я переименовал папкуrepl-test вrepl_test с подчеркиванием.

затем

 lein compile

а также

 lein run

Из любопытства я тоже посмотрел наClojure-CSVи они используют & quot; - & quot; везде, кроме имени папки, так что может повезет, скопировав то, что они сделали.

Кроме того, цитируяеще один вопрос на clojure пространствах имен:

& quot; Также обратите внимание, что вы не должны использовать подчеркивание в именах пространств имен или дефис в именах файлов, и где бы вы ни использовали дефис в имени пространства имен, вы должны использовать подчеркивание в имени файла (так, чтобы ns my.cool-project было определен в файле с именем cool_project.clj в каталоге с именем my). & quot;

И изClojure Программирование Wiki раздел о пакетах java: & quot; Clojure соблюдает соглашения об именах Java для каталогов и файлов, но соглашения об именах Lisp для имен пространств имен. Таким образом, пространство имен Clojure com.my-app.utils будет находиться по пути com / my_app / utils.clj. Обратите особое внимание на различие между подчеркиванием и дефисом. & Quot;

Простое переименование пространства имен здесь не работает. Но создание нового проекта без & quot; - & quot; во имя решил мою проблему. Надеюсь, это кому-то тоже поможет.
@MattFenwick clojure-csv содержит черту. Как это построено? То есть на какой платформе? Я пойду попробую выяснить. octopusgrabbus
Я думаю, что было бы полезно объяснить, почему с помощью- или же_ в пространствах имен может вызвать проблемы.
Я попробовал ваше предложение, и оно скомпилировано с той же ошибкой. Я все еще немного запутался в именах проектов project.clj, именах core.cljs и папках. Не будет также относиться к repl_test и не будетst1 где-то ссылаться? octopusgrabbus

Похожие вопросы