这会让我失望......除了内置的本机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秒),希望它值得!
答案 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])