[英]How to add directory to Clojure's classpath?
我已将带有 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)
class 路径默认为:
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确实使这个过程变得更加痛苦,更重要的是导致可重复的构建过程 。 你可以在几年后回到这个项目,仍然可以获得一个repl。 在这些情况下使用leiningen的概述:
这假设你正在使用的库不是maven仓库中的一个包的一部分或可用,很多都是。
非痛苦,流行的方法是不要直接使用maven和类路径以及JRE,并使用leiningen: https : //github.com/technomancy/leiningen/
否则,你可以修改clj
任何内容,并以java喜欢的方式添加/设置类路径。 请参阅例如在java类路径中设置多个jar
应该注意的是,您还可以选择在运行时使用库石榴添加类路径https://github.com/cemerick/pomegranate
这可以让你这样做:
(require '[cemerick.pomegranate :as pom])
(pom/add-classpath "/home/user/~.m2/....")
我假设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。
另一种选择是在您计划运行 REPL 或保存项目文件的文件夹中创建一个deps.edn
文件。
该文件用于通知 Clojure 有关依赖项、源文件、执行配置文件等...它在您运行 REPL 时加载(但还有其他用例),它由 Clojure 的核心支持,官方记录在Z5E7BA56C50BADEZ0804C上clojure.org/reference/deps_and_cli
在您的情况下,您可能只想放置以下内容,以声明您要下载的依赖项并将其放在 Java 类路径中。
{
:deps {
the.dependency/you-want {:mvn/version "1.0.0"}
}
}
在deps.edn
,您可以指定:
请注意,依赖项将被下载并缓存在deps.edn
本身旁边的.cpcache/
文件夹中。 我不确定您是否可以指示它使用全局~/.m2
来代替。
您可以在clojars.org上找到依赖坐标(名称和最新版本)
deps.edn
是“更轻的”,是核心 Clojure 的一部分,如果不如 leiningen 强大的话; 因此可能适合在 REPL 或 CLI 上为临时/探索性编码设置环境。
您还可以在~/.clojure/deps.edn
中拥有一个全局deps.edn
,您可能希望在其中定义通用配置、依赖项等以在不同项目中使用。 可以使用命令行上的选项调用/覆盖特定配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.