【问题标题】:Environment variable CLASSPATH <> Clojure's CLASSPATH. Why?环境变量 CLASSPATH <> Clojure 的 CLASSPATH。为什么?
【发布时间】:2011-04-08 01:45:18
【问题描述】:

这里我检查环境变量 CLASSPATH
daniel@daniel-laptop:~/ps/clojure/projects/ring-tutorial$ echo $CLASSPATH
/home/daniel/ps/clojure/projects/ring-tutorial/src

在这里我检查一下 java 认为它是什么。
daniel@daniel-laptop:~/ps/clojure/projects/ring-tutorial$ lein repl
Clojure 1.1.0 用户=> (系统/getProperty "java.class.path")
“src/:classes/:/home/daniel/.m2/repository/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/commons-io-1.4.jar:lib/clj-stacktrace-0.1.0.jar:lib/clojure-contrib-1.1.0.jar:lib/ring-devel-0.2 .0.jar:lib/jetty-util-6.1.14.jar:lib/clj-html-0.1.0.jar:lib/ring-jetty-adapter-0.2.0.jar:lib/jetty-6.1.14 .jar:lib/ring-core-0.2.0.jar:lib/commons-fileupload-1.2.1.jar:lib/ring-servlet-0.2.0.jar:lib/commons-codec-1.4.jar:"

如您所见,这两种反应完全不同。我很确定我一定是误解了我应该在哪里编辑 Java 的 CLASSPATH 变量以“获取它”,除了我发现的所有内容都表明这应该有效。那么有什么关系呢? leiningen 是否产生了它自己奇怪的 clojure 叛徒实例?我在编辑一个完全不相关的变量吗?非常感谢任何帮助。

【问题讨论】:

  • 提示:去看看 lein 脚本,你告诉他打开你的 repl。你会看到它用 CLASSPATH 做了一些事情

标签: java linux clojure classpath leiningen


【解决方案1】:

Clojure 类路径是 Java 类路径。

当使用 -cp 参数调用 java 可执行文件时,$CLASSPATH 将被忽略,Leiningen(和大多数其他 Clojure 构建脚本)会这样做。

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

【讨论】:

    【解决方案2】:

    使用 CLASSPATH 变量管理依赖项的问题在于,所有 Java 和其他 JVM 语言都需要对其进行操作。没过多久,你就在角落里画了自己。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-11-02
        • 2016-03-04
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 2012-12-07
        相关资源
        最近更新 更多