我正在学习Clojure并且来自Ruby背景。
我正在寻找类似于gem install <library>
的东西。 lein install
的各种咒语似乎不适合这个法案。
有没有办法简单地在本地安装一个库,以便可以在REPL中引用它而无需创建项目?
答案 0 :(得分:6)
好像,你想用lein安装一个库。这是plugin,安装它并使用
lein localrepo install <filename> <[groupId/]artifactId> <version>
答案 1 :(得分:6)
如果您的目标仅仅是在REPL中加载库,请考虑使用alembic
。它动态加载类路径,解决依赖关系并自动从存储库中提取库。
以下是一个用例:
(require 'alembic.still)
(alembic.still/distill '[enlive "1.1.1"])
只需要您将以下条目添加到.lein/project.clj
:
{:dev {:dependencies [[alembic "0.1.1"]]}}
请参阅this answer。
答案 2 :(得分:4)
Java和clojure 通常不会拥有全局安装库的想法。您应该始终使用最小的依赖项集创建类路径。您需要以某种方式指定和管理此类路径,最简单的方法是使用leiningen,这需要一个项目。
leiningen自动执行检索远程库并将它们放在本地存储库中的过程,这有点类似于gem安装,但这些库不会自动可用于REPL。
让一组库始终可用的最简单方法是在开始一个新项目之前有一个'scratch'项目,用于REPL实验。这不是太多的开销。
答案 3 :(得分:3)
在lein 2中,您可以使用要安装的软件包更新profiles.clj:
~\user\.lein\profiles.clj
随着lein的任何项目的首次运行,本地仓库将更新为profiles.clj中的内容。
有时我只是在没有项目文件夹的情况下运行lein deps,这将为您更新本地仓库。
通过这种方式,您可以将任何库添加到project.clj或从repl调用它,它将从本地存储库中提取。
答案 4 :(得分:0)
如果没有项目,则将依赖项添加到全局lein用户配置文件中,而不是位于~/.lein/profiles.clj
。
老实说,这份文件对莱恩来说并不适合。因此,这部分令人困惑。但是您可以这样编辑该文件:
{:user {:plugins [[lein-pprint "1.1.1"]]
:dependencies [[slamhound "1.3.1"]]}}
在:plugins
向量中添加您想要的任何全局lein插件。然后在:dependencies
向量中添加您想要全局可用的任何库。
然后在任何开始lein repl
的地方都可以使用这些依赖项。在您运行的所有地方lein
,您都可以使用其他插件功能。
如果您使用tools.deps而不是lein,也可以使用clj
命令而不是lein
命令。那就有点不同了。相反,您想要修改~/.clojure/deps.edn
文件。在您要在其中添加依赖项的位置:
{:deps {clj-time {:mvn/version "0.14.2"}}}
因此,只要您在运行clj
命令时将以上内容放入用户deps.edn中,clj-time库就可以使用。