11

我已经将带有 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
4

4 回答 4

12

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

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

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

于 2012-08-15T18:09:10.920 回答
10

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

否则,您可以修改其中的任何内容clj并以 java 喜欢的任何方式添加/设置类路径。例如,请参阅在 java 类路径中设置多个 jar

于 2012-08-15T17:13:38.563 回答
10

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

这让你喜欢:

 (require '[cemerick.pomegranate :as pom])
 (pom/add-classpath "/home/user/~.m2/....")
于 2012-08-17T15:12:08.997 回答
7

我假设这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。

于 2012-08-15T17:13:59.157 回答