Использование Java jar в Clojure +

1

Я новичок в clojure. Я пытаюсь использовать java jar в clojure, но он, похоже, не работает. Я построил путь, положил банку физически в папку lib проекта и попытался:

(import 'jml.clustering.NMF)

Но я получаю это исключение:

КлассNotFoundException jml.clustering.NMF java.net.URLClassLoader.findClass(: -1)

Как это исправить? Заранее спасибо.

Теги:
jar
import
clojure

2 ответа

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 намного проще, чем я могу забыть, чтобы загрузить новую копию.

  • 0
    Спасибо за разъяснения :), это, вероятно, сработает, но это не тот jml, который я пытаюсь использовать, и, как я вижу, тот, который мне нужен, не зарегистрирован на maven.org :( Моя головная боль продолжается ... Спасибо так или иначе.
  • 0
    Если вы используете mvn для установки lein версии в локальный кеш, lein сможет найти ее там.
Показать ещё 2 комментария
0

Если 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"]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню