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

时间:2017-01-12 16:32:51

标签: maven clojure leiningen

我正在开发一个使用该库的库和应用程序。

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

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

.
├── README.md
├── project.clj
├── repo
├── src
├── target
├── libraries
│   └── my-library
└── test

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

2016年的解决方案是什么?

3 个答案:

答案 0 :(得分:9)

不需要将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"]] boot pom; boot jar; boot install中将其声明为依赖项,它就应该有效。

  3. 修改 同样,如果您使用Boot,则可以运行//this partical >> SubProgram "opengl " { <<< Keywords { "LIGHTMAP_ON" "DIRLIGHTMAP_ON" "HDR_LIGHT_PREPASS_OFF" } Vector 0 [_Color] SetTexture 0 [_MainTex] 2D 0 SetTexture 1 [_LightBuffer] 2D 1 SetTexture 2 [unity_Lightmap] 2D 2 "!!ARBfp1.0 PARAM c[2] = { program.local[0], { 8 } };

答案 1 :(得分:2)

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

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

其他替代方案是Maven(非常类似于Leiningen,但是采用XML格式)或Boot,这需要采用不同的方法。

答案 2 :(得分:2)

更简单的解决方案是使用此处记录的lein checkoutshttps://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md#checkout-dependencies

在项目的顶层创建一个目录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/

项目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/

现在,在构建clj项目时,它将(始终)使用来自~/tupelo的源代码而不是clojars,maven等。这意味着您无需制作&amp;每次进行tupelo中要使用的更改时,(重新)从lib clj安装一个jar。