Самый простой способ управлять моим CLASSPATH? - PullRequest
5 голосов
/ 23 декабря 2009

Я начинаю немного играть с Clojure, и мой опыт работы с Java довольно ограничен. Я из динамичного мира Ruby и OO, поэтому функциональная сторона вещей очень интересна!

В любом случае, когда я обнаруживаю библиотеки и различные инструменты для использования (и файлы учебников для Pragmatic Clojure Book), все обычно требует размещения файлов в CLASSPATH, чтобы Clojure мог видеть библиотеку для использования.

Есть ли такая вещь, как хорошая практика CLASSPATH? Хотел бы я когда-либо иметь CLASSPATH только с теми внешними библиотеками файлов, которые мне нужны, или я могу добавить любую библиотеку или файл, которые мне когда-либо понадобятся, в каталог и просто определить его как мой CLASSPATH и требовать только то, что нужно?

Если это поможет, я пользователь OSX и Emacs (использую slime и swank-clojure).

Ответы [ 7 ]

5 голосов
/ 23 декабря 2009

Я рекомендую использовать leiningen и lein-swank для управления этим. Вы можете запустить REPL в каталоге и подключиться к нему из Emacs.

2 голосов
/ 23 декабря 2009

Лично я использую вариант clojure-project функции elisp Фила Хагельберга, см. Источник в этом посте для группы Clojure. Он устанавливает classpath соответствующим образом для проекта, над которым вы будете работать, затем запускает SLIME. ( РЕДАКТИРОВАТЬ: Вам нужно изменить значение, которое присваивается swank-clojure-jar-path, чтобы указать clojure.jar. Я использую (expand-file-name "~/.clojure/clojure.jar") по умолчанию.)

Чтобы ответить на вопрос о том, чтобы все время находиться на пути к классам, а не только добавлять то, что нужно: Насколько мне известно, ничего не сломается, если вы выберете первый подход (я знаю, что я делаю это для экспериментальные цели), но очевидно, что с первым подходом все может сломаться (см. комментарий cjstehno ниже), и в правильном проекте я считаю, что второй будет чище. В какой-то момент будет необходимо определить, какие библиотеки используются (и какие их версии), хотя бы для того, чтобы рассказать об этом leiningen (или maven) - почему бы не следить за этим на ходу.

1 голос
/ 23 декабря 2009

Начиная с Java SE 1.6 (или JDK 1.6), вы можете включать записи пути к классу подстановочными знаками. Если ваши файлы классов находятся в. \ Bin, а ваши jar-файлы библиотеки находятся в. \ Lib, то в Windows вы можете определить путь к классам следующим образом:

set CLASSPATH=bin;lib\*;

Это позволит вам добавить файлы JAR в каталог. \ Lib, и они будут автоматически добавлены в путь к классам для новых экземпляров JRE.

Подробнее см. По этой ссылке: Настройка пути к классам

До JDK 1.6 вам приходилось добавлять каждый jar-файл в ClassPath отдельно.

1 голос
/ 23 декабря 2009

Обычная практика CLASSPATH для Java - помещать в этот путь классов проектов только файлы jar, необходимые для проекта, что означает наличие потенциально разных путей классов для различных проектов. Обычно это управляется IDE как часть свойств проекта.

Поскольку вы используете Emacs и, следовательно, вероятно, не имеете или не используете что-то вроде проектов, для вас может быть более удобным установить и использовать единый глобальный путь к классам для всех ваших вещей, связанных с clojure, или, возможно, даже просто поместить все необходимые файлы jar в каталог java2se / jre / lib / ext вашей установки java.

Две основные проблемы, которые могут возникнуть из-за наличия ненужных файлов JAR в вашем пути к классам: 1. это оказывает незначительное негативное влияние на время запуска JVM и 2. становится все труднее убедиться, что вы отсутствие классов с разными версиями в одном и том же пути к классам (т. е. разные классы с одинаковым пакетом и именем в разных jar-файлах).

1 голос
/ 23 декабря 2009

Мы используем Clojure и используем ряд инструментов инфраструктуры, особенно Eclipse (IDE) (http://en.wikipedia.org/wiki/Eclipse_%28software%29) и maven (http://en.wikipedia.org/wiki/Apache_Maven).), maven управляет библиотеками и jar-зависимостями, поэтому, если у вас есть несколько таких и они могут начать расти, используя Maven.

Отвечая на ваш первоначальный вопрос, вы можете просто поместить свои банки в один каталог и каждый раз запускать их по имени. Но вы получите выгоду от инструментов ...

Если вы только исследуете, то Eclipse, вероятно, будет управлять вашими jar-файлами довольно безболезненно. Вы можете добавить их в проект по мере необходимости через опцию Build Path -> Configure Build Path.

По мере продвижения вашей работы вы, возможно, захотите разделить ее на проекты, которые поддерживает Eclipse, чтобы вы могли добавить свои (или другие проекты) в путь сборки.

Если вы используете внешние библиотеки Clojure, посмотрите, были ли они упакованы как проекты maven (у них будет файл pom.xml). POM выдаст список зависимостей. #

0 голосов
/ 29 декабря 2009

clojure-contrib / launchers / bash / clj-env-dir обладает интересным свойством, заключающимся в том, что вы можете указать его в каталоге, и он будет в основном включать в него все, что угодно. Раньше у меня был каталог ~ / classpath, в который я помещал любые jar-файлы и связывал любые часто используемые каталоги, и это прекрасно работало. Очень простой способ сброса и использования. Теперь я склонен использовать Maven clojure-maven-plugin, и это также хорошо работает, хотя может быть немного утомительным, когда вы просто хотите обойти некоторые идеи.

0 голосов
/ 24 декабря 2009

Я только что обнаружил этот бит, который мне нужно сделать, чтобы выстрелить:

(setq swank-clojure-extra-classpaths (list "/class/path/1" "/class/path/2" "/class/path/3" "etc"))

...