5

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

最简单/正确的方法是什么?

我见过leiningen - 如何为本地 jar 添加依赖项?,但它似乎已经过时了?

更新:所以我按照这些说明github 上的 lein 部署文档为我的 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

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

Update2:在这里找到答案的最后一点。

4

3 回答 3

1

将它们作为依赖项添加到您的 leiningen 项目中。您可以编造名称和版本。然后运行 ​​lein deps 并在找不到时显示错误消息,它将为您提供运行的确切命令,以便您可以将 jar 安装到本地存储库,然后您决定使用共享存储库,您可以使用相同的过程来放置您的那里的依赖。

于 2013-02-08T00:53:41.247 回答
1

@Arthur 的回答很好,但我想我会更充实一点,因为它缺少一些细节。

  1. 始终牢记可重复性。如果您没有做到让需要访问工件的任何人都可以以标准方式访问工件,那么您就是在寻求支持。

  2. 部署文档是了解部署工件所需了解的所有信息的好地方。由于您处于多语言环境中,因此您可能无法lein负责部署所有工件,但至少您可以将您的 clojure 特定 jar 放到 S3 甚至文件共享中(如果您愿意的话)。您的其余工件必须直接使用 Maven 或 Ant 将工件上传到文件服务器或 S3 上的 Maven 存储库。在我目前的公司,我们正在使用 technomancy 的优秀s3 wagon private来托管我们的封闭源代码工件和clojars来托管我们可以开源的任何东西。

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

于 2013-02-08T02:43:06.450 回答
0

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

这主要是因为基于 Java 的工具(Eclipse 等)理解 Maven 项目但并不真正理解 Leiningen 项目。优秀的逆时针 Clojure 插件正在慢慢变得更好,但是对于基于 IDE 的高效工作流程来说,集成仍然不够好。

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

于 2013-02-08T02:35:36.207 回答