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

在这里我检查了环境变量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 user =>(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:”

正如你所看到的,这两个答案是完全不同的。 我非常肯定,我必须误解我应该在哪里编辑Java的CLASSPATH变量来“获取它”,除了我发现的所有内容都表明这应该起作用。 那么交易是什么? 列宁宁是否会产生自己的怪异背叛者的clojure实例? 我在编辑一个完全不相关的变量吗? 任何帮助非常感谢。


$CLASSPATH在这里确实是完全不相关的。 如果在命令行中没有提供classpath信息, java -the-JVM-launcher-program就会使用它; Leiningen为JVM提供了一个适用于您正在处理的项目的类路径。

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

顺便说一句,如果你刚开始使用Clojure,我建议你尽可能地使用工具链的类路径管理工具(这可能意味着Emacs + lein swank或一些IDE + Clojure插件)。 否则,关于SO的Clojure classpath问题还有很多问题,还有关于您可以谷歌的主题的众多其他资源...但现在该工具支持非常强大,并且您通常不需要触摸classpath手,这只是在开始时最好避免的痛苦。


使用CLASSPATH变量来管理依赖关系的问题在于,所有Java和其他JVM语言都需要对其进行操作。 在角落里画你自己并不需要很长时间。

当你启动一个只启动服务器的服务器时,它是有效的。 它彻底打破了Java开发人员的PC的束缚,该开发人员拥有10个程序和项目,都需要不同的依赖关系,然后花费更多时间调试bash脚本来操作编写源代码的CLASSPATH变量。

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


Clojure类路径是Java类路径。

当用-cp参数调用java可执行文件时, $CLASSPATH被忽略,Leiningen(以及大多数其他Clojure构建脚本)会执行该参数。

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

链接地址: http://www.djcxy.com/p/56971.html

上一篇: Environment variable CLASSPATH <> Clojure's CLASSPATH. Why?

下一篇: What's the "big idea" behind compojure routes?