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-library是git submodule与我的图书馆.如何让我的应用程序知道这种依赖?
2016年的解决方案是什么?
Pet*_*lny 10
不需要将lib包含为git子模块.您可以在本地"释放"my-library项目.
只需转到my-library项目文件夹并运行即可lein pom; lein jar; lein install.这里的关键部分是lein install将jar和pom安装到本地存储库; 通常为〜/ .m2.
转到您的项目中使用这个库,只需声明它作为你的依赖project.clj一样:dependencies [[my-library "version"]],它应该工作.
编辑:
Simlarly,如果你使用Boot,你可以运行boot pom; boot jar; boot install
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.
使用 git 子模块或基于本地文件的方法来管理 Clojure 中的库并不常见。Clojure 利用许多标准 Java 生态系统方法来进行库管理。通常,这涉及到构建库并将其部署到公共 Maven 存储库,例如Clojars(或 Maven Central)。如果您仅在自己的组织内使用此功能,则组织级 Maven 存储库还有其他选项。
然后,您可以在自己的项目中使用该库,方法是将其声明为您选择的构建工具中的依赖项。在 Clojure 中,最常见的工具是 Leiningen,您可以将该库的使用声明为依赖项。
其他替代方案是 Maven(与 Leiningen 非常相似,但采用 XML 格式)或Boot,它们采用了一些不同的方法。