Я новичок в clojure. Я пытаюсь использовать java jar в clojure, но он, похоже, не работает. Я построил путь, положил банку физически в папку lib проекта и попытался:
(import 'jml.clustering.NMF)
Но я получаю это исключение:
КлассNotFoundException jml.clustering.NMF java.net.URLClassLoader.findClass(: -1)
Как это исправить? Заранее спасибо.
Просто вставлять банку в каталог lib не будет заставлять leiningen включать банку в путь к классам. Вместо этого попробуйте добавить библиотеку в список зависимостей проекта:
:dependencies [[org.clojure/clojure "1.6.0"]
[org.realityforge.jml/jml "0.9.3"]]
Вы можете найти группу /id и версию доступных библиотек, выполнив поиск в одном из поддерживаемых публичных репозиториев. Я искал maven.org для jml
чтобы найти информацию, которую я использовал выше.
Обратите внимание, что это не использует вашу локальную копию jar, а скорее загружает новую из репозитория и кэширует ее где-то. Это может быть не идеальным, но для моих собственных проектов я обнаружил, что получение лейна для использования местной банки просто слишком велико для головной боли. Использование одного из clojars или maven.org намного проще, чем я могу забыть, чтобы загрузить новую копию.
mvn
для установки lein
версии в локальный кеш, lein
сможет найти ее там.
Если JAR является вашим собственным, вы можете выполнить следующие действия, чтобы использовать локальный JAR, недоступный в любом хранилище maven.
С учетом Jar: foo.jar
В проект проекта Clojure:
mvn deploy:deploy-file -DgroupId=local -DartifactId=foo \
-Dversion=1.0.0 -Dpackaging=jar -Dfile=foo.jar \
-Durl=file:repo
Измените свой project.clj
чтобы включить новую зависимость:
[local/foo "1.0.0"]