我可以在 REPL 的 Lein 项目中查找内容吗?
Can I lookup things within a Lein Project in the REPL?
说我有香草 project.clj 喜欢
(defproject myservice "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:mailing-list {:name "myservice@example.com" :post "myservice@climate.com"}
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[ring/ring-core "1.4.0"]
[ring/ring-jetty-adapter "1.4.0"]
[compojure "1.4.0"]
[ring/ring-defaults "0.1.5"]
[org.clojure/tools.logging "0.3.1"]
[clj-http "2.0.0"]]
:plugins [[lein-ring "0.9.7"]]
:ring {:handler myservice.core/standalone-app
:port 3000}
:profiles {
:uberjar {:ring {:handler myservice.core/app}}}
)
在 lein repl
中,我可以从 project.clj 中查找值吗?如何?当然,我的盲目黑客没有奏效?
user=> (:mailing-list project)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: project in this context, compiling:(/private/var/folders/1g/fnytl2x93sx6hp2f1rsf4h1r5xtqv_/T/form-init6671981825845237047.clj:1:1)
接下来的问题是我可以在 project.clj 中进一步使用项目地图中的内容吗?就像我想拉出那个邮件列表 :name 并将其替换为 :deb :maintainer?
:deb
{:toDir "target"
:package "mysevice"
:maintainer {:name "Meeples", :email "myservice@example.com"}
...
}
我相信你能看出来,我对此有点陌生,但是 project.clj 只是可执行的 Clojure,不是吗?如果我知道项目的地图名称,应该可以查询吧?
这是 leiningen 中的相关行:https://github.com/technomancy/leiningen/blob/b29b2ea41b6d177a8a57493b979164eab0931e4d/leiningen-core/src/leiningen/core/project.clj#L405
鉴于命名空间是 leiningen.core.project
,地图应该在它下面。
您可以像往常一样 def
数据并使用 ~
包含它们
(def mailing-list {:name "myservice@example.com" :post "myservice@climate.com"})
(defproject myservice "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:mailing-list ~mailing-list
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[ring/ring-core "1.4.0"]
[ring/ring-jetty-adapter "1.4.0"]
[compojure "1.4.0"]
[ring/ring-defaults "0.1.5"]
[org.clojure/tools.logging "0.3.1"]
[clj-http "2.0.0"]]
:plugins [[lein-ring "0.9.7"]]
:ring {:handler myservice.core/standalone-app
:port 3000}
:profiles {
:uberjar {:ring {:handler myservice.core/app}}}
:deb {
:toDir "target"
:package "mysevice"
:maintainer {:name "Meeples", :email (:name ~mailing-list)}})
说我有香草 project.clj 喜欢
(defproject myservice "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:mailing-list {:name "myservice@example.com" :post "myservice@climate.com"}
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[ring/ring-core "1.4.0"]
[ring/ring-jetty-adapter "1.4.0"]
[compojure "1.4.0"]
[ring/ring-defaults "0.1.5"]
[org.clojure/tools.logging "0.3.1"]
[clj-http "2.0.0"]]
:plugins [[lein-ring "0.9.7"]]
:ring {:handler myservice.core/standalone-app
:port 3000}
:profiles {
:uberjar {:ring {:handler myservice.core/app}}}
)
在 lein repl
中,我可以从 project.clj 中查找值吗?如何?当然,我的盲目黑客没有奏效?
user=> (:mailing-list project)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: project in this context, compiling:(/private/var/folders/1g/fnytl2x93sx6hp2f1rsf4h1r5xtqv_/T/form-init6671981825845237047.clj:1:1)
接下来的问题是我可以在 project.clj 中进一步使用项目地图中的内容吗?就像我想拉出那个邮件列表 :name 并将其替换为 :deb :maintainer?
:deb
{:toDir "target"
:package "mysevice"
:maintainer {:name "Meeples", :email "myservice@example.com"}
...
}
我相信你能看出来,我对此有点陌生,但是 project.clj 只是可执行的 Clojure,不是吗?如果我知道项目的地图名称,应该可以查询吧?
这是 leiningen 中的相关行:https://github.com/technomancy/leiningen/blob/b29b2ea41b6d177a8a57493b979164eab0931e4d/leiningen-core/src/leiningen/core/project.clj#L405
鉴于命名空间是 leiningen.core.project
,地图应该在它下面。
您可以像往常一样 def
数据并使用 ~
(def mailing-list {:name "myservice@example.com" :post "myservice@climate.com"})
(defproject myservice "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:mailing-list ~mailing-list
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[ring/ring-core "1.4.0"]
[ring/ring-jetty-adapter "1.4.0"]
[compojure "1.4.0"]
[ring/ring-defaults "0.1.5"]
[org.clojure/tools.logging "0.3.1"]
[clj-http "2.0.0"]]
:plugins [[lein-ring "0.9.7"]]
:ring {:handler myservice.core/standalone-app
:port 3000}
:profiles {
:uberjar {:ring {:handler myservice.core/app}}}
:deb {
:toDir "target"
:package "mysevice"
:maintainer {:name "Meeples", :email (:name ~mailing-list)}})