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