Lein Swank не работает после обновления Lein

После обновления Leiningen (с v1.6 до v1.7) с lein upgrade команда lein swank перестал работать с сообщением об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError:  
Caused by: java.lang.ClassNotFoundException:  
[...] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class:  .  Program will exit.

Поскольку я попробовал это из командной строки, я считаю, что конфигурация Emacs в данном случае не имеет значения. Поэтому я попытался полностью переустановить Leiningen. Что я сделал (используя предложения здесь и сообщения об ошибках):

rm -R ~/.m2
# rm ~/.lein/plugins/*  
lein self-install

(Я использовал вторую строку только для второй переустановки, так что это здесь для полноты картины)

Затем я создал новый проект и установил плагин lein-swank, поскольку, насколько я понимаю, это рекомендуемый способ на данный момент:

lein new test-project
lein plugin install swank-clojure 1.4.0  # I tried earlier version (1.3.2) too

И наконец начал лейн Суонк с:

cd test-project
lein swank

Но получил ту же ошибку, что и раньше.

Итак, мои вопросы:

  1. Как решить эту проблему?
  2. Правильно ли я переустановил Leiningen или отсутствуют некоторые шаги?

UPD. Вот project.clj генерируется новым проектом:

(defproject test-project "1.0.0-SNAPSHOT"
   :description "FIXME: write description"
   :dependencies [[org.clojure/clojure "1.3.0"]])

1 ответ

Решение

Помогает ли страница устранения неполадок swank-clojure:

Поиск проблемы

В настоящее время наличие нескольких версий swank-clojure на пути к классам может вызвать проблемы при запуске lein swank или lein jack-in. Рекомендуется не помещать swank-clojure в ваш:dev-dependencies, но запустить установку плагина lein, чтобы вместо этого установить его глобально для всех проектов. Это также означает, что люди, взламывающие ваш проект, не будут вмешиваться, если они не являются пользователями Emacs.

Для некоторых пакетов также возможно транзитивно загружать старые версии swank-clojure, поэтому проверьте каталог lib/, если у вас возникли проблемы. В частности, известно, что Incanter имеет эту проблему. Разумное использование: исключения заставляют это работать:

:dependencies [[incanter "1.2.3" :exclusions [swank-clojure]]]

Начиная с swank-clojure 1.3.4, наличие версий clj-stacktrace старше 0.2.1 в вашем проекте или подключаемых модулей уровня пользователя приведет к невозможности разрешения символа: ошибки pst-elem-str. Имейте в виду, что плагины пользовательского уровня в ~/.lein/plugins - это uberjars в Leiningen 1.x, поэтому возможно, что один из ваших плагинов (например, lein-difftest до версии 1.3.7) содержит старую версию clj-stacktrace даже если у него там нет своего файла. Если у вас возникли проблемы, достаточно указать более новую версию:

:dependencies [[clj-stacktrace "0.2.4"]]
Другие вопросы по тегам