3

lein upgrade使用命令升级 Leiningen(从 v1.6 到 v1.7)后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

最后开始 lein swank :

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"]])
4

1 回答 1

1

swank-clojure故障排除页面是否有帮助:

故障排除

当前在类路径上有多个版本的 swank-clojure 可能会在运行 lein swank 或 lein jack-in 时导致问题。建议不要将 swank-clojure 放在你的 :dev-dependencies 中,而是运行 lein plugin install 来为所有项目全局安装它。这也意味着,如果他们不是 Emacs 用户,那么对您的项目进行黑客攻击的人就不必将其拉进来。

某些软件包也可能会传递地引入旧版本的 swank-clojure,因此如果遇到问题,请检查 lib/ 目录。特别是,众所周知,Incanter 会表现出这个问题。明智地使用 :exclusions 使其工作:

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

从 swank-clojure 1.3.4 开始,项目或用户级插件中的 clj-stacktrace 版本早于 0.2.1 将导致 Unable to resolve symbol: pst-elem-str 错误。请记住 ~/.lein/plugins 中的用户级插件是 Leiningen 1.x 中的 uberjars,因此您的插件之一(例如 1.3.7 之前的 le​​in-difftest)可能包含旧的 clj-stacktrace 甚至如果那里没有自己的文件。如果您遇到问题,指定一个较新的版本就足够了:

:dependencies [[clj-stacktrace "0.2.4"]]
于 2012-02-23T20:41:05.540 回答