我正在使用lein repl
without a project,所以没有project.clj
。
我正在Java 1.8.0_191 OpenJDK 64位服务器VM上运行Leiningen 2.8.1。
当我需要一个Clojure依赖项时,我认为它应该可以正常工作-例如clojure.data.json
-我注意到它不在我的.m2 directory中。这就是为什么我得到FileNotFoundException Could not locate clojure/data/json__init.class or clojure/data/js
on.clj on classpath
吗?我也找不到我的其他Clojure依赖项,所以我不知道它们的位置以及该依赖项是否应位于.m2中。
我理解错误消息,但是不知道错误消息的位置,甚至不知道如何将其正确地添加到CLASSPATH中以使REPL能够看到它,我仍然卡住了。
这是我仍然需要安装的依赖项吗?如果是这样,如何在不进行任何项目的情况下安装它?
我不了解JVM,因此我在其答案中添加了一些额外的信息。
答案 0 :(得分:2)
我在没有项目的情况下使用
lein run
,所以没有project.clj。
如果使用的是Leiningen,则创建声明依赖项的project.clj文件会容易得多。 Leiningen将阅读project.clj并处理将任何缺少的依赖项获取到本地Maven存储库的操作,并在启动REPL /应用程序时将它们添加到您的 classpath 中。 (lein run
在没有project.clj的目录中对我不起作用;我得到一个错误:No :main namespace specified in project.clj.
。您是说lein repl
吗?)
当我需要一个Clojure依赖项时,我认为它应该可以正常工作-就像clojure.data.json-我注意到它不在我的.m2目录中。
clojure.data.json不随Clojure一起提供-它是一个单独的依赖项,必须将其提取并添加到类路径中才能使用它。 classpath告诉JVM加载类文件时在哪里寻找。如果您在project.clj中声明依赖项,Leiningen将为您完成这两项操作:
:dependencies [[org.clojure/clojure "1.10.0"]
[org.clojure/data.json "0.2.6"]]
如果只想获取依赖项,也可以使用lein deps
命令。
您可以使用lein new project_name_goes_here
创建一个新的/空白的Leiningen项目。它将具有一个project.clj,其中包含一些样板条目和一个:dependencies
键,您可以在其中声明依赖项。
我理解错误消息,但是不知道错误消息的位置,甚至不知道如何正确地将其添加到CLASSPATH中以使REPL能够看到它,但我仍然卡住了。这是我仍然需要安装的依赖项吗?如果是这样,如何在不进行任何项目的情况下安装它?
您可以从Internet手动下载它,然后将其路径手动添加到您的类路径中,但是如果您已经在使用Leiningen,则将行添加到project.clj文件中并让Leiningen来为您轻松得多。
如果不能使用带有Leiningen的project.clj文件,则还有其他方法可以使用Clojure和解析依赖项/在运行时构建类路径。 Boot适应了这一工作流程,您可以花一点力气就可以像这样使用Leiningen,以及更新的tools.deps工具。 this ClojureVerse thread中有每种方法的示例,但是请注意,其中某些方法在本质上与声明文件中的依赖项相同,而不是将其声明为CLI参数。
例如,使用Clojure CLI工具:
$ clj -Sdeps "{:deps {org.clojure/data.json {:mvn/version \"0.2.6\"}}}"
Clojure 1.9.0
user=> (require '[clojure.data.json :as json])
nil
user=> (json/write-str {:foo "bar"})
"{\"foo\":\"bar\"}"
user=> (System/getProperty "java.class.path")
"src:
/Users/me/.m2/repository/org/clojure/clojure/1.9.0/clojure-1.9.0.jar:
/Users/me/.m2/repository/org/clojure/data.json/0.2.6/data.json-0.2.6.jar:
/Users/me/.m2/repository/org/clojure/spec.alpha/0.1.143/spec.alpha-0.1.143.jar:
/Users/me/.m2/repository/org/clojure/core.specs.alpha/0.1.24/core.specs.alpha-0.1.24.jar"
您可以在同一目录中创建一个包含{:deps {org.clojure/data.json {:mvn/version \"0.2.6\"}}}
的deps.edn文件,clj
会读取该文件,必要时解析依赖关系,并相应地构建类路径。
答案 1 :(得分:0)
这是使用lein try
的绝佳机会。将其添加到UI
中后,您只需运行:@Route("")
,您就会得到运行REPL的机会,而该依赖关系是必需的。