如何为Leiningen配置专有依赖项?

时间:2013-02-07 23:25:16

标签: clojure leiningen clojure-java-interop

我们正在开发一个有一些Clojure-Java互操作的项目。在这一点上,我们有一个具有各种依赖关系的类,我们将它们放入Eclipse中的用户库进行开发,但当然使用Leiningen(2.x)时没有任何帮助。我们的大多数依赖项都是专有的,因此它们不在某个存储库中。

最简单/最直接的方法是什么?

我见过leiningen - how to add dependencies for local jars?,但似乎已经过时了?

更新:所以我在these instructionsthe lein deployment docs on github之后为我的jar创建了一个本地maven存储库,并编辑了我的project.clj文件:

:dependencies [[...]
               [usc "0.1.0"]]
:repositories {"usc" "file://maven_repository"}

maven_repository位于项目目录下(因此不使用file:///)。当我跑“lein deps”时 - 我收到了这条消息:

Retrieving usc/usc/0.1.0/usc-0.1.0.pom from usc
Could not transfer artifact usc:usc:pom:0.1.0 from/to usc (file://maven_repository): no supported algorithms found
This could be due to a typo in :dependencies or network issues.
Could not resolve dependencies

“找不到支持的算法”是什么意思?我该如何解决?

更新2:找到答案的最后一位here

3 个答案:

答案 0 :(得分:1)

将它们作为依赖项添加到您的leiningen项目中。您可以组成名称和版本。 然后运行lein deps并在找不到它时出现错误信息将为您提供运行的确切命令,这样您就可以将jar安装到您的本地仓库然后你决定使用共享仓库你可以使用相同的过程将依赖项放在那里。

答案 1 :(得分:1)

@Arthur的答案很好,但我认为我会把它充实,因为它缺少一些细节。

  1. 始终牢记Repeatability。如果您没有这样做,那么需要访问工件的任何人都可以以标准方式访问工件,那么您需要支持地狱。

  2. documentation on deployment是一个很好的地方,可以找到有关部署工件的所有信息。由于您处于多语言环境中,您可能无法lein负责部署所有工件,但至少可以将您的clojure特定罐子放入S3甚至是文件共享(如果您愿意)。其余的工件必须直接使用Maven或Ant将工件上传到文件服务器或S3上的Maven仓库。在我现在的公司,我们使用技术优秀的s3 wagon private来托管我们的闭源文件,clojars托管我们可以开源的任何东西。

  3. @Arthur所指的是lein install。所有这一切都是将当前项目的副本安装到您​​的本地.m2目录中,以便您框中的其他项目可以引用它们。除非您已经将maven的安装配置为使用.m2文件夹的共享目录(在您的环境中可能不是一个坏主意?),否则这将意味着签出项目的其他任何人都不会能够建立它。如果您想要使用此路线,则需要将localRepository中的$M2_HOME/conf/settings.xml节点设置为您团队其他成员有权访问的共享位置。有关详细信息,请参阅the docs

答案 2 :(得分:0)

YMMV但我发现在使用Polyglot Clojure / Java项目时最好使用Maven而不是Leiningen。

这主要是因为基于Java的工具(Eclipse等)了解Maven项目,但并不真正理解Leiningen项目。使用优秀的Counterclockwise Clojure插件,情况会慢慢好转,但对于基于IDE的高效工作流程,集成仍然不够好。

在存储库方面,我建议设置一个私有共享Maven存储库。如果您计划在团队中管理一组复杂的依赖项,您迟早会需要它:不妨咬紧牙关并立即完成它。