已下载依赖项但仍无法要求,clojure

时间:2017-03-17 23:57:49

标签: clojure dependencies classpath leiningen

这会让我失望......除了内置的本机deps之外,我不能要求任何东西。没有打嗝,没有http-kit等......即使我可以在.m2/repository

的硬盘上找到它们

lein new myapp

[markdown-clj 0.9.91]添加到project.clj,

添加(ns metapp.core (:require [markdown-clj :as mark]) )

lein run

Retrieving markdown-clj/markdown-clj/0.9.91/markdown-clj-0.9.91.pom from clojars Retrieving markdown-clj/markdown-clj/0.9.91/markdown-clj-0.9.91.jar from clojars Exception in thread "main" java.io.FileNotFoundException: Could not locate quote/markdown_clj__init.class or quote/markdown_clj.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.,

lein deps没有返回任何内容

有人知道什么是错的吗?这个堆栈跟踪不是很有用,所以Lein可以获取deps,但不知道如何要求它们?

编辑:运行Linux Mint 18.0,clojure位于/home/denis/clojure-1.8.0,并由别名java -cp /home/denis/clojure-1.8.0/clojure-1.8.0.jar clojure.main调用。 myapp中的目录树为/home/denis/prg/cljr/myapp

: 谢谢guyz,但现在觉得自己像个白痴。 所以总结一下未来的人,在project.clj中,要求依赖" X"并不意味着你应该"要求"它是" X"。您必须按照作者在文档中指定的方式来要求它,例如project.clj中的[http-kit "2.2.0"]如下所示

(ns metapp.core (:require [org.httpkit.client :as http] )

其次,您在代码中需要的方式与REPL中所需的方式不同,例如,这适用于yourapp.core (require [stuff.core as stuff])。你也可以像这样写它,它也可以(ns yourns (:require [stuff.core :as stuff])。但是这个synthaxe不起作用:(:require [stuff.core :as stuff])

然而,在REPL中,这是不同的故事!如果它是添加的依赖项,我必须使用(:require '[stuff.core]),如果它是内置库,我必须使用(:require 'clojure.string)!请注意(require '[http.async.core])之类的内容并不起作用,因为它不是内置的。因此,如果您查看仅显示内置示例的文档https://clojuredocs.org/clojure.core/require,就像我一样,您注定要失败。 对于像clojure.string这样的内置库,你可以使用简单的(require 'clojure.string),yes,这是一个没有依赖的工具。玩得开心! LOOOOONNG旅程未来,clojure只是语言到目前为止我需要花4天时间搞清楚如何使用IMPORT模块(戳Python,它只花了30秒),希望它值得!

2 个答案:

答案 0 :(得分:1)

您应该要求markdown.core。从该项目的文档:

(ns foo
  (:use markdown.core))

在你的情况下:

(ns metapp.core
  (:require [markdown.core :as mark]))

应该有效。

没有意识到库的名称和构成库的名称空间是不同的东西,很容易被绊倒。

答案 1 :(得分:0)

markdown-clj只是包的名称。但是当你require时,你需要指定一个模块,而不是一个包。大多数软件包都有core模块,因此正确的用法是:

(:require [markdown-clj.core :as mark])