Использование Java-кода в проекте Leiningen - PullRequest
2 голосов
/ 02 декабря 2011

Мой проект Leiningen требует нескольких внешних классов Java, к которым я пытаюсь получить доступ из Clojure.

Сначала я попытался поместить файлы классов в my_project / resources /, так как этот каталог находится в пути к классам, что подтверждается выполнением

lein classpath

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

Мой второй подход включал добавление ключа: java-source-path в мой project.clj, но я снова был поражен неудачей (то же поведение, что и выше, я не могу получить доступ к классу из Clojure REPL).

Где я здесь не так?

Ответы [ 4 ]

2 голосов
/ 02 декабря 2011

Пара вещей, которые могут быть неправильными:

Используете ли вы файлы .class или .java? java-source-path предназначен для источников , то есть файлов .java. И .java файлы должны быть скомпилированы, прежде чем они могут быть загружены.

Кроме того, java-классы должны быть либо импортированы, либо квалифицированы по полному имени пакета в коде clojure.

Если возможно, и ваш java-код не связан напрямую с вещами clojure, проще всего просто скомпилировать и связать ваши java-файлы в jar-файл, который вы можете добавить в зависимости вашего проекта leiningen.

0 голосов
/ 27 ноября 2015

В вашем project.clj у вас есть ключевое слово для пути к ресурсам?Вы сказали, что у вас есть ключевое слово java-source-paths, но они используются для файлов .java, которые необходимо компилировать при сборке / запуске вашего проекта.Добавьте в ваш файл project.clj

:resource-paths ["relative/path/to/your/classes/folder" "relative/path/to/other/classes"]

Это позволит вашему проекту ссылаться на ваши различные классы с помощью оператора import в объявлении пространства имен.

(ns my.project.name-space
  (:require [clojure.core.async :as async])
  (:import MySuperAwesomeClass))
0 голосов
/ 13 декабря 2014

В вашем файле .project для вашего проекта укажите: java-source-paths как ["java"], а не как "java" 1 , если в каталоге "java" находится источник java файлы в каталоге вашего проекта.

Запуск 'lein run' должен автоматически скомпилировать исходные коды java перед тем, как они будут запущены, если вы указали права: java-source-paths и: main прямо в файле .project.

Источник: https://github.com/technomancy/leiningen/blob/master/doc/MIXED_PROJECTS.md

  1. Я сделал эту ошибку и продолжал задаваться вопросом, что я делаю неправильно. Книгу программирования Chas Emerick Clojure в главе о реляционных базах данных, в которой говорится о спящем режиме, нужно немного обновить.
0 голосов
/ 03 декабря 2011

После ввода исходного кода java в путь вы запустили lein compile?

...