Почему incanter, кроме самого incanter, использует пространства имен, ожидающие класса clojure / core / matrix или .clj?

В файле .clj у меня есть (используйте '(incanter core io ...)). Эта ошибка возникает при попытке оценить этот код: FileNotFoundException Не удалось найти clojure / core / matrix__init.class или clojure / core / matrix.clj в пути к классам: clojure.lang.RT.load (RT.java:443). Если я изменю код только на этот: (используйте '(incanter)), тогда все будет в порядке, за исключением того, что ни одно из необходимых пространств имен не будет доступно, чего и следовало ожидать. Я довольно успешно использую jEdit с плагином clojure в течение последних 18 месяцев и внимательно проверил, что мой путь к классам в порядке. Я пробовал (использовать '... math.combinatorics') и jar-файлы csv и json (все они работали нормально), чтобы быть разумно уверенным, что это не проблема конфигурации jEdit. Я искал «матрицу» в банке clojure / core, но не нашел. Любая помощь в решении этой проблемы приветствуется.

После дальнейшего расследования: я думаю, что нашел источник своей проблемы: в объявлении пространства имен clatrix-0.3.0 требуется clojure.core.matrix. Когда я удаляю clatrix из пути к классам и оцениваю (используйте '(incanter core ...)) эта ошибка возникает: FileNotFoundException Не удалось найти clatrix / core__init.class или clatrix / core.clj в пути к классам: clojure.lang.RT.load ( RT.java:443). Когда clatrix добавляется в путь к классам, возникает моя исходная ошибка (т.е. не удается найти clojure.core.matrix). В Incanter-core есть файл Matrix.class. Кажется, что incanter зависит от clatrix, который зависит от clojure.core. матрица, которой не существует. Как решить эту проблему или есть обходной путь?


person Brian    schedule 24.01.2014    source источник
comment
clojure.core.matrix не поставляется с clojure.core.   -  person noisesmith    schedule 24.01.2014
comment
Кроме того, если вы используете leiningen для разрешения зависимостей и создания пути к классам, он автоматически найдет библиотеки, которые нужны вашим различным библиотекам.   -  person noisesmith    schedule 24.01.2014
comment
Я использую leiningen для полных сборок. Я считаю jEdit простым и полезным редактором для разработки и тестирования функций и модулей Clojure.   -  person Brian    schedule 24.01.2014
comment
Затем вам нужно вручную разрешить ваши зависимости.   -  person noisesmith    schedule 24.01.2014
comment
Что касается вашего редактирования: вы все еще не понимаете. Clojure.core.matrix существует. Я ссылался на это выше. Если вы используете lein, lein предоставит его автоматически. Если вы решили разрешить зависимости вручную, вам нужно найти его и поместить в путь к классу.   -  person noisesmith    schedule 25.01.2014
comment
Кроме того, вам нужно будет найти все его зависимости (объявленные в его pom.xml или project.clj) и также поместить их в свой путь к классам. И их зависимости тоже. И т. Д. Инструмент проще использовать, поскольку зависимости объявлены таким образом, чтобы их могли использовать автоматизированные инструменты. Lein - один из таких инструментов.   -  person noisesmith    schedule 25.01.2014


Ответы (1)


Проблема здесь в том, что вы не предоставляете транзитивные зависимости для своей библиотеки. clojure.core.matrix не является частью clojure.core. Очевидно, что какой бы метод Jedit ни использовал для запуска Clojure, он не обнаружит и не разрешит ваши зависимости за вас.

Хотя это разрешение зависимостей может быть выполнено вручную, это менее подверженная ошибкам задача и требует меньше времени, чтобы позволить leiningen разрешить ваши зависимости и настроить путь к классу во время разработки, а также использовать задачу lein repl для запуска интерактивного ответа во время разработки. . Lein repl запускает сервер nrepl с четко определенным API, к которому могут подключаться несколько редакторов / сред программирования. Хороший редактор для разработки clojure должен обеспечивать какой-нибудь способ подключения к серверу nrepl.

person noisesmith    schedule 24.01.2014
comment
Надеюсь, Алекс Отт сможет пролить свет на дополнительную информацию, относящуюся к моей проблеме выше, поскольку она, похоже, действительно связана с Incanter. - person Brian; 25.01.2014
comment
Нет. Проблема в том, что у него есть зависимости, которые вы не указали. С инкантером проблем нет. Вам необходимо указать его зависимости или использовать инструмент, который предоставляет их автоматически. - person noisesmith; 25.01.2014