Clojure загрузить файлы

Я пытаюсь создать простой проект clojure, и я не уверен, как загружать файлы между проектами. Я уверен, что ответ в документации, но я не могу найти простой ответ в любом месте, и я не уверен, где искать.

По существу, мой каталог выглядит следующим образом:

Clojure/
    clojure/
        clojure.jar
        other clojure files
    clojure-contrib/
        clojure-contrib.jar
        other contrib files
    project/
        main.clj
        utils.clj

И я хочу, чтобы main.clj был примерно таким:

(ns project.main
  (:require project.utils))
(greet)

и utils.clj должны быть примерно такими:

(ns project.utils)
(defn greet [] (println "Hello, World!"))

Но это не удается:

Exception in thread "main" java.io.FileNotFoundException: Could not locate project/utils__init.class or project/utils.clj on classpath:  (main.clj:1)

Когда я пытаюсь запустить его. Мой путь к классу включает верхний каталог Clojure/ и обе банки. Я также попытался разместить каталог project/ в пути к классам, но не повезло.

Как вы создаете простой проект clojure?

Ответ 1

Вы не указываете, что такое ваша среда (например, Emacs/SLIME/Swank, vim/Vimclojure), поэтому я собираюсь предположить, что вы пытаетесь вызвать его из командной строки.

Вам нужно иметь каталог проекта Clojure/ в пути к классам:

java -cp path/to/clojure.jar:path/to/clojure-contrib.jar:path/to/Clojure ...

Убедитесь, что пути верны относительно текущего рабочего каталога. Он должен указывать на корень вашего пространства имен (т.е. Если он работает в Clojure/, путь .).

Фактически, ваш макет проекта Works On My Machine (tm), за исключением того, что у меня есть use вместо require (но у вас должна быть другая ошибка, если вы дошли до точки, когда Clojure может найти все ваши файлы).

Ответ 2

Этот ответ Я отправил на другой вопрос, надеюсь, даст вам представление о том, как ваши имена файлов должны касаться имен пространства имен для работы. Однако, поскольку ваш вопрос: "Как настроить простой проект Clojure", лучше начать следующее:

  • Перейдите в GitHub и возьмите Leiningen.

  • Следуйте инструкциям в README. В итоге вы сделаете что-то вроде

    $ lein new my-project
    $ cd my-project
    # ... edit project.clj ...
    $ lein deps
    
  • Взломайте! Вам нужно будет поместить файлы в нужные места. Это будет означать, что ваши исходные файлы в дереве каталогов коренится в my-project/src, причем ваше основное пространство имен, скорее всего, находится в my-project/src/my_project/core.clj. Но на самом деле, я объяснил все подробности в ответ, связанный с выше, поэтому, пожалуйста, прочитайте его (и оставляйте комментарий, если я пропустил что нибудь).: -)

Leiningen позаботится о базовом макете проекта и установит путь к классу REPL/swank/nailgun для вас (если вы еще не встретили последние два, вы скоро - но это отдельная тема, черта, часть которой я покрыл в определенной степени, например в этом SO-ответе), так что, надеюсь, вам никогда не придется иметь дело с n n n n ense hand hand hand, (Ответ, связанный с swank, с которым я связан в последнем заключении в скобках, содержит подробную информацию о том, как настроить swank с правильным классом классов из Emacs.)