如何在Clojure中使用本地依赖项?

Kam*_*nek 8 clojure maven leiningen

我正在开发一个库和一个使用这个库的应用程序.

我没有这个库的任何远程存储库,它只作为常规项目存储在GitHub上.

在我的应用程序中,我想使用这个库作为依赖,我正在考虑的是有这样的结构:

.
??? README.md
??? project.clj
??? repo
??? src
??? target
??? libraries
?   ??? my-library
??? test
Run Code Online (Sandbox Code Playgroud)

其中my-librarygit submodule与我的图书馆.如何让我的应用程序知道这种依赖?

2016年的解决方案是什么?

Pet*_*lny 10

不需要将lib包含为git子模块.您可以在本地"释放"my-library项目.

  1. 只需转到my-library项目文件夹并运行即可lein pom; lein jar; lein install.这里的关键部分是lein install将jar和pom安装到本地存储库; 通常为〜/ .m2.

  2. 转到您的项目中使用这个库,只需声明它作为你的依赖project.clj一样:dependencies [[my-library "version"]],它应该工作.

编辑: Simlarly,如果你使用Boot,你可以运行boot pom; boot jar; boot install


Ala*_*son 5

lein checkouts一个更简单的解决方案是按照此处记录的方式 使用: https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md#checkout-dependency

checkouts在项目的顶层创建一个目录(与该src目录平行)。在 中checkouts,只需使用库代码创建一个指向项目目录的符号链接。例如,考虑一个项目clj和一个库tupelo

drwxrwxr-x 10 alan alan 4096 Jan  5 12:09 clj/
drwxrwxr-x 11 alan alan 4096 Jan  9 20:01 tupelo/
Run Code Online (Sandbox Code Playgroud)

该项目clj看起来像这样:

> d clj clj/* clj/checkouts/*

drwxrwxr-x 10 alan alan  4096 Jan 12 10:36 clj/
drwxrwxr-x  2 alan alan  4096 Oct 14 09:23 clj/checkouts/
lrwxrwxrwx  1 alan alan    17 Oct 30 16:44 clj/checkouts/tupelo -> /home/alan/tupelo/
drwxrwxr-x  2 alan alan  4096 Aug 31 10:05 clj/doc/
-rw-rw-r--  1 alan alan 11219 Aug 31 10:05 clj/LICENSE
-rw-rw-r--  1 alan alan   794 Jan  5 12:09 clj/project.clj
-rw-rw-r--  1 alan alan   457 Aug 31 10:05 clj/README.md
drwxrwxr-x  2 alan alan  4096 Jan  3 09:01 clj/resources/
drwxrwxr-x  3 alan alan  4096 Aug 31 10:05 clj/src/
drwxrwxr-x  8 alan alan  4096 Nov 14 16:26 clj/target/
drwxrwxr-x  3 alan alan  4096 Sep 29 22:31 clj/test/
Run Code Online (Sandbox Code Playgroud)

现在,在构建clj项目时,它将(始终)使用来自~/tupeloclojars、maven 等的源代码。这意味着您不必tupelo每次进行更改时都从 lib 制作并(重新)安装 jar你想用在clj.


Ale*_*ler 2

使用 git 子模块或基于本地文件的方法来管理 Clojure 中的库并不常见。Clojure 利用许多标准 Java 生态系统方法来进行库管理。通常,这涉及到构建库并将其部署到公共 Maven 存储库,例如Clojars(或 Maven Central)。如果您仅在自己的组织内使用此功能,则组织级 Maven 存储库还有其他选项。

然后,您可以在自己的项目中使用该库,方法是将其声明为您选择的构建工具中的依赖项。在 Clojure 中,最常见的工具是 Leiningen,您可以将该库的使用声明为依赖项

其他替代方案是 Maven(与 Leiningen 非常相似,但采用 XML 格式)或Boot,它们采用了一些不同的方法。