Вопрос

Итак, сейчас у меня есть этот код:

родовое слово

После генерации кода кода в Emacs я получаю следующий результат:

родовое слово

Но когда я генерирую код-код и запускаю полученный файл jar, я получаю сообщение об ошибке:

родовое слово

Итак, у меня два вопроса:

  1. Почему uberjar не работает точно так же, как REPL?
  2. Что я могу сделать, чтобы решить эту проблему?
Это было полезно?

Решение

1. Почему uberjar работает иначе, чем REPL?

Причина ошибки «NO_SOURCE_PATH» заключается в том, что вы в данный момент не находитесь в пространстве имен, которое определило 'foo.

Чтобы проиллюстрировать: если я оцениваю ваш код в моем REPL и выполняю его, он помещает меня в пространство имен contact-form.core, как и следовало ожидать, потому что (ns contact-form.core) оценивается REPL, но если я переключусь на пространство имен user и вызову -main, я могу произвести ту же ошибку:

родовое слово

Таким образом, указав точку входа в main для автономного выполнения uberjar (вне REPL), это эквивалентно вызову (contact-form.core/-main) из пространства имен по умолчанию в вашем банке, которое является clojure.core, потому что (ns contact-form.core) не оценивался. Результат: main может быть выполнен с полным путем (в пространстве имен) к функции, но ни один из символов из contact-form.core не доступен в текущем пространстве имен по умолчанию.

2. Исправление

Решением было бы сначала явно переключиться на ваше пространство имен:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top