Clojure установите проект и поместите его в classpath - PullRequest
2 голосов
/ 01 февраля 2011

Я только что установил критерий , и я хочу иметь возможность использовать его из repl и из других проектов.Как расширить путь к классам Java, чтобы я мог использовать установленную библиотеку из любого места?

Буду признателен за ответы, которые могут легко работать со всеми проектами, над которыми я работаю в будущем.Я использую leiningen, и я предполагаю, что он сделает это, когда вы запустите lein install, но либо я делаю что-то не так, либо этого недостаточно.

Ответы [ 2 ]

8 голосов
/ 01 февраля 2011

вы должны выучить базовый maven (lein использует maven под капотом) и java механику classpath. Для очень краткого обзора:

maven хранит зависимости в скрытом каталоге .m2 в вашей домашней папке. Просмотрите папку, и это будет иметь смысл. Когда вы запустите lein install, он поместит банку в эту папку. Попробуйте найти тот, который вы установили. Однако большинство зависимостей, которые вы используете, будут на сервере, таком как clojars, поэтому вам не нужно устанавливать его вручную, как вы это делали. например, критерий здесь .

В вашем проекте вам нужно добавить критерий в качестве зависимости в project.clj. Это будет выглядеть примерно так:

(defproject your-project "0.1.5" :description "blah" 
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [criterium "0.0.1-SNAPSHOT"]
                 ]   
  :dev-dependencies
    [[swank-clojure "1.2.1"]])

Теперь перейдите в корневую папку вашего проекта и запустите lein deps. Это загрузит зависимости в project.clj и автоматически поместит их в .m2 в папку lib вашего проекта. Чтобы запустить репл с установкой classpath, запустите lein repl

Каждый проект, который использует критерий, должен будет добавить его в качестве зависимости в свой проект. Clj

5 голосов
/ 01 февраля 2011

Буду признателен за ответы, которые могут легко работать во всех проектах, над которыми я работаю в будущем.

К сожалению, это невозможно на JVM; Вы не можете изменять путь к классам во время выполнения, поэтому он должен рассчитываться отдельно для каждого проекта. Общесистемного пути к классам не существует, хотя такие инструменты, как Leiningen и cljr, могут предоставлять нечто похожее в некоторых контекстах:

$ lein install swank-clojure 1.3.0-SNAPSHOT

Это установит swank-clojure в ~ / .lein / plugins, что сделает его доступным для всех проектов Leiningen как dev-зависимость и сделает его доступным, когда вы выполняете «lein repl» вне контекста проекта, но вещи, которые являются фактическими зависимостями проектов, нужно будет поместить в файл project.clj этого проекта. В противном случае было бы легко создавать проекты, которые работают на вашем компьютере, но не повторяются.

...