【问题标题】:How to add directory to Clojure's classpath?如何将目录添加到 Clojure 的类路径?
【发布时间】:2012-08-15 17:00:16
【问题描述】:

我已将带有 Maven 的库安装到 ~/.m2/repository/ 目录。我想将该路径添加到默认的 Clojure 类路径中。我找不到如何做到这一点的文档。

有什么提示吗?

干杯!

clj
Clojure 1.4.0
user=> (require '[clojure.java.jmx :as jmx])
FileNotFoundException Could not locate clojure/java/jmx__init.class or clojure/java/jmx.clj on classpath:   clojure.lang.RT.load (RT.java:432)

类路径默认为:

user=> (println (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
(#<URL file:/Users/myuser/cljmx/> #<URL file:/usr/local/Cellar/clojure/1.4.0/clojure-1.4.0.jar> #<URL file:/Users/myuser/cljmx/>)
nil

【问题讨论】:

  • 您是否迫切需要不使用 leiningen?
  • 谢谢大家,lein 让我免于头痛,一切正常。

标签: java clojure


【解决方案1】:

Leiningen 通过保持与项目关联的类路径设置确实让这个过程不那么痛苦,更重要的是导致可重复的构建过程。您可以在多年后回到该项目并仍然获得repl。在这些情况下使用 leiningen 的概述:

  • lein 新项目名称
  • 将您需要的库添加到您选择的名称的 project.clj 文件中
  • 运行 lein deps 打印出用于将 jar 添加到本地 repo 的命令
  • 添加罐子
  • 再次运行 lein deps(如果使用 leiningen2,可以跳过此步骤)
  • 运行 lein repl
  • 享受

这是假设您正在使用的库不是 maven 存储库中包的一部分或不可用,很多都是。

【讨论】:

    【解决方案2】:

    不痛不痒的流行方法是不要直接混淆 maven 和类路径以及 JRE 并使用 leiningen:https://github.com/technomancy/leiningen/

    否则,您可以修改 clj 中的任何内容,并以 java 喜欢的任何方式添加/设置类路径。参见例如Setting multiple jars in java classpath

    【讨论】:

    • 你能补充更多细节吗?比如应该在leiningen的project.clj中设置哪些选项?
    【解决方案3】:

    需要注意的是,您还可以选择在运行时使用库 pomegranate https://github.com/cemerick/pomegranate 添加类路径

    这让你喜欢:

     (require '[cemerick.pomegranate :as pom])
     (pom/add-classpath "/home/user/~.m2/....")
    

    【讨论】:

      【解决方案4】:

      我假设clj 是启动 Clojure REPL 的脚本。查看此脚本并找到与此类似的行:

      java -cp /path/to/clojure.jar clojure.main
      

      在这里你开始类clojure.main 在你的类路径上有“clojure.jar”。要添加更多 jar,只需将它们添加到 -cp 选项值的末尾即可。例如。在 Linux 上:

      java -cp /path/to/clojure.jar:/path/to/mylib.jar clojure.main
      

      (在 Windows 上使用 ; 而不是 :

      但是,很快您就会厌倦这种方式,并会寻找项目管理工具。所以现在就开始使用它是有意义的。看看Leiningen - 它基于 Maven 为您管理依赖项(因此添加新 jar 将非常容易)并具有 REPL。

      【讨论】:

      • 使用 java 6 及更高版本 /path/to/mylib.jar 可以更改为 /path/to/jarfolder/* 它将包含类路径中的所有 *.jar 文件
      猜你喜欢
      • 2014-09-29
      • 2016-06-03
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多