如何使用lein来管理依赖的依赖?

时间:2012-05-17 15:24:51

标签: clojure leiningen

我应该创建一个本地存储库来更改项目中依赖项的依赖项吗?

我有一个使用docjure的clojure项目。 docjure包含对poi 3.6的依赖。

由于我正在阅读生成的Excel文件中的错误,我有一个本地版本的poi 3.8,我已经入侵以解决该错误。

很容易将我的poi 3.8罐放入我的项目lib /目录中,以便我的项目在repl上运行正常。

但是,lein deps(或jar和uberjar)愉快地清理了lib /目录并重新安装了3.6版本的poi,破坏了我的构建。

我认为可能的解决方案是双重的:

1 - 将我的黑客poi 3.8放入本地存储库 2 - 创建我自己的docjure本地副本,并更新它的依赖项以指向该本地存储库。

我正在寻找确认这是在这种情况下做的“正确的事情”,或者有人指出做其他事情要容易得多。

1 个答案:

答案 0 :(得分:3)

如果您还没有阅读Leiningen的Repeatability维基页面,那么值得一读。引用部分内容:

  

如果代码是公开的,您应该打开上游的错误报告,让他们将其发布到Clojars,Sonatype或Maven Central等公共存储库中,具体取决于项目。如果它们有抵抗力或太慢,那么总是可以发布“Clojars forks”;请参阅lein帮助部署以获取更多详细信息。

最终的解决方案是尝试将您的更改推向上游。然后你可以依赖你需要的版本,而我认为 Leiningen会更喜欢那个版本,如果它高于传递版本。


另一种选择可能是将您的jar包含在安全(签入)目录中。然后编写一个可以hook into a built-in task的插件,并将jar复制到lib目录中。我真的不知道这是否会成功,但值得研究。