这杀了我...除了内置的本机 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
解决方案: 谢谢你们,但现在感觉自己像个白痴。 因此,在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])
了.但是这个合成器不起作用:(: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)
,是的,那个不适用于依赖项的库。祝大家玩得开心!LOOOOONNG的旅程在前面,clojure是迄今为止我需要花4天时间弄清楚如何导入模块的语言(戳Python,只花了30秒),希望值得!
你应该需要markdown.core
.从该项目的文档:
(ns foo
(:use markdown.core))
在您的情况下:
(ns metapp.core
(:require [markdown.core :as mark]))
应该工作。
没有意识到库的名称和组成库的命名空间是不同的东西是很容易被绊倒的。
markdown-clj
只是一个包的名称。但是当你require
某些东西时,你需要指定一个模块,而不是一个包。大多数软件包都有core
模块,因此正确的用法是:
(:require [markdown-clj.core :as mark])