У меня есть программа clojure, которая в какой-то момент выполняет функцию с именем db-rebuild-files-table
. Эта функция принимает имя файла каталога в качестве одного строкового аргумента и вызывает рекурсивную функцию, которая спускается в дерево файлов каталога, извлекает определенные данные из находящихся там файлов и регистрирует каждый файл в базе данных mysql. Конечным результатом этой команды является таблица «файлы», заполненная всеми файлами в дереве в данном каталоге.
Мне нужно иметь возможность периодически запускать эту команду из оболочки.
Итак, я добавил директиву :gen-class
в файл, содержащий мою функцию -main
, которая на самом деле вызывает (db-rebuild-files-table *dirname*)
. Я запускаю lein uberjar
и создаю банку, которую затем могу выполнить:
java -jar my-project-SNAPSHOT-1.0.0-standalone.jar namespace.containing.main
Разумеется, функция запускается, но в базе данных существует только одна запись для каталога *имя_каталога*. Когда я выполняю точное то же самое sexp в clojure REPL, я получаю правильное поведение: все дерево файлов под *dirname* обрабатывается.
Что я делаю неправильно? Почему вызов (db-rebuild-files-table *dirname*)
ведет себя непоследовательно при вызове из REPL и при выполнении из командной строки?
[EDIT] Что еще более странно, так это то, что я нигде не получаю ошибок. Все вызовы функций работают как надо. Я даже могу запустить функцию -main в REPL, и она правильно обновляет таблицу.