环境变量CLASSPATH<> Clojure的CLASSPATH。为什么?

时间:2010-09-03 21:44:07

标签: java linux clojure classpath leiningen

在这里,我检查环境变量CLASSPATH
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ echo $ CLASSPATH
/家庭/丹尼尔/ PS / Clojure的/项目/环教程/ SRC

在这里,我检查java认为它是什么。
daniel @ daniel-laptop:〜/ ps / clojure / projects / ring-tutorial $ lein repl
Clojure 1.1.0 用户=> (System / getProperty“java.class.path”)
“SRC /:类/:/首页/丹尼尔/ .m2目录/库/ leiningen / leiningen / 1.1.0 / leiningen-1.1.0-standalone.jar:LIB / Clojure的-1.1.0.jar:LIB / servlet的API -2.5-6.1.14.jar:LIB /公地-IO-1.4.jar:LIB / CLJ-堆栈跟踪-0.1.0.jar:LIB / Clojure的-的contrib-1.1.0.jar:LIB /环devel的-0.2 .0.jar:LIB /码头-util的-6.1.14.jar:LIB / CLJ-HTML-0.1.0.jar:LIB /环码头适配器-0.2.0.jar:LIB /码头-6.1.14的.jar:LIB /环形芯-0.2.0.jar:LIB /公地文件上传-1.2.1.jar:LIB /环servlet的0.2.0.jar:LIB /公地编解码器-1.4.jar:”

正如您所看到的,这两种反应完全不同。我很确定我必须误解我应该在哪里编辑CLASSPATH变量以使java“得到它”,除了我发现的所有内容都说这应该有效。那是什么交易?莱宁根是否会产生自己奇怪的叛徒叛变事件?我在编辑一个完全不相关的变量吗?任何帮助非常感谢。

3 个答案:

答案 0 :(得分:9)

$CLASSPATH在这里确实无关紧要。如果在命令行上没有为它提供类路径信息,那么java - JVM-launcher-program将使用它; Leiningen为JVM提供了适合您正在处理的任何项目的类路径。

在这种特殊情况下,"/home/.../ring-tutorial/src"对于Ring教程来说不是一个非常有用的类路径,因为它只包含Ring教程的源代码,并且不包含Clojure jar(运行Clojure代码所必需的),环形罐子(环是一个多模块项目)或环依赖的任何其他罐子。 Leiningen生成的类路径可能看起来很长,但它的所有组件都需要存在。

顺便说一下,如果您刚刚开始使用Clojure,我建议您坚持使用工具链的类路径管理工具(可能意味着Emacs + lein swank或某些IDE + Clojure插件),如果可能的话。否则,关于SO的Clojure类路径问题有很多问题,还有关于你可以google的主题的大量其他资源......但是现在该工具支持相当强大,你通常不需要 / em>手动触摸类路径,最好在开始时避免痛苦。

答案 1 :(得分:2)

使用CLASSPATH变量来管理依赖关系的问题是所有Java和其他JVM语言都需要为了它们的目的而操纵它。没过多久你就会在角落里画自己。

当您启动仅启动服务器的服务器时,它会起作用。它完全打破了Java开发人员的PC,他有10个程序和项目都需要不同的依赖关系,然后花更多时间调试bash脚本来操作编写源代码的CLASSPATH变量。

因此,管理类路径的这种方式已经被废弃,更喜欢其他类加载技术,或者在使用CLASSPATH时,只在本地使用它。

答案 2 :(得分:0)

Clojure类路径是Java类路径。

使用$CLASSPATH参数(Leiningen(以及大多数其他Clojure构建脚本))调用java可执行文件时,将忽略

-cp

如果您使用的是Leiningen等构建工具,则必须使用它来管理类路径。