Использование конкретной java-оболочки clojure без project.clj

Я стараюсь не задавать вопросов, которые не помогут многим другим людям, но я слишком долго занимаюсь этим, чтобы не просить о помощи. Я пытаюсь использовать эту оболочку clojure для пакета java в качестве зависимости в моем project, но я получаю много ошибок, потому что нет project.clj.

Я пытался использовать плагин lein-git-deps со следующими ключами в моем проекте.clj:

:plugins [[lein-git-deps "0.0.1-SNAPSHOT"]]
:git-dependencies [["https://github.com/lunkdjedi/clj-ta-lib"]]

Запуск $ lein git-deps дает мне следующее:

Setting up dependency for  [https://github.com/lunkdjedi/clj-ta-lib]
Running git pull on  .lein-git-deps
Running git checkout  master  in  .lein-git-deps

но в моем локальном каталоге ничего не меняется, за исключением того, что теперь есть пустой каталог .lein-git-deps/. Я предполагаю, что это не сработало из-за отсутствия project.clj.

Я смог клонировать проект и вызвать $ mvn package clojure:repl, который успешно скомпилировал и открыл экземпляр REPL, в котором я мог прекрасно использовать оболочку. Когда я запускаю $ lein install, это дает мне:

Couldn't find project.clj, which is needed for install

но когда я запускаю $ mvn install, он дает мне BUILD SUCCESS и его можно найти в ~/.m2/repositories/clj-ta-lib.

Я помещаю :dependencies [[clj-ta-lib/clj-ta-lib "0.0.1"]] в свой project.clj и перезапускаю REPL, но когда я вызываю (use 'clj-ta-lib.core), я получаю:

CompilerException java.lang.Exception: namespace 'clj-ta-lib.core' not found, compiling:(*cider-repl app*:71:13) 

Редактировать:

Больше не появляется предыдущая ошибка, но все еще появляется эта:

CompilerException java.lang.IllegalArgumentException: No matching ctor found for class com.tictactec.ta.lib.meta.PriceHolder, compiling:(clj_ta_lib/core.clj:13:3) 

person v4gil    schedule 27.12.2016    source источник


Ответы (2)


То, что ты говоришь, звучит вполне разумно. Жаль, что проект не размещен на clojars или на maven Central, но, по крайней мере, есть pom, позволяющий вам легко опубликовать или установить его самостоятельно. mvn install - это правильно, и когда я сам клонирую проект и устанавливаю его, все устанавливается нормально, как вы и говорите.

Однако я не могу воспроизвести вашу ошибку при попытке использовать библиотеку. После его установки я создал новый проект, который зависит от только что установленного артефакта, и в repl внутри этого проекта я могу прекрасно использовать классы библиотеки. Или, ну, я не знаю, как использовать эти функции по назначению, но они доступны для моего использования:

user=> (use 'clj-ta-lib.core)
nil
user=> ta
#<core$ta clj_ta_lib.core$ta@c668834>

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

person amalloy    schedule 28.12.2016
comment
Я перезапустил процесс и получил еще одну ошибку, которую я видел раньше, но не видел, когда собирал этот пост. Посмотреть обновление - person v4gil; 28.12.2016
comment
Ошибка в вашем обновлении, вероятно, связана с несоответствием версии зависимостей. Удалите свою собственную зависимость от библиотеки Java, которую вы хотите использовать, и просто позвольте транзитивной зависимости оболочки clojure сделать всю работу за вас. На самом деле, попробуйте проект только с одной зависимостью от оболочки clojure. Если это работает, начните добавлять зависимости обратно, пока не найдете проблему. - person amalloy; 28.12.2016
comment
Это сделало это! Спасибо за руководство, а также мне нравится 4Clojure. Когда-нибудь вы сможете использовать его в качестве испытательного стенда для AGI на основе clojure! - person v4gil; 28.12.2016

Как упоминалось здесь, https://mvnrepository.com/artifact/com.tictactec/ta-lib/0.4.0 просто добавьте [com.tictactec/ta-lib "0.4.0"] к зависимостям вашего проекта.clj.

:dependencies [[com.tictactec/ta-lib "0.4.0"]]
person Saikat Kumar Dey    schedule 28.12.2016
comment
Этот вопрос касается не того, как получить библиотеку java, а того, как получить библиотеку clojure, которая предоставляет для нее интерфейс на основе clojure. - person amalloy; 29.12.2016