5

我对 Clojure 和 Java 比较陌生。为什么 lein 项目中的 lib 文件夹没有添加到 lein 项目的 git repo 中?我认为在分布式开发中拥有所有必要的 jar 会很方便。

4

4 回答 4

4

Git 在存储二进制文件方面非常糟糕。如果您签入您的 jar,然后必须执行升级,那么您的存储库很快就会达到数百兆字节。

于 2011-02-18T18:03:55.970 回答
4

在 Leiningen 项目中,project.clj 文件指示项目的依赖项,当您运行“lein deps”时,project.clj 文件中列出的所有依赖项都将下载到 lib/。因此,无需签入 jar,因为 project.clj 与 'lein deps' 命令的结合是其他人复制您拥有的相同 lib/ 所必需的。检查所有的罐子是多余的,而且浪费空间。

此外,正如 mblinn 指出的那样,最好从专为分发和更新依赖项而设计的工件存储库中提取 jar,而不是在依赖项更新时不断更改和提交新的 jar。当您的项目依赖于经常更改的快照 jar 时尤其如此;如果您签入 jar,则每次更新快照时都必须签入一个新 jar,但是如果您依靠“lein deps”从工件存储库中提取 jar,那么您将保持最新状态而不会努力。但即使对于非快照 jar,通过在 project.clj 中更改其版本然后运行“lein deps”来更新依赖项也比手动将 jar 放入 lib/ 并签入要容易和快捷得多。

我希望上面的解释是可以理解的。如果不是,并且您不理解所讨论的某些概念,例如工件存储库或依赖项,请告诉我,我会解释。

于 2011-02-18T05:24:38.463 回答
3

自动依赖管理的最大优势之一是您的库不存储在您的 VCS 中,以及它在版本控制方面的所有微妙影响。

由于 leiningen 内部使用 maven artifact 解析,需要手动指定哪些 artifact repositories 以防在默认存储库中找不到所需的依赖项,即maven central repositoryclojure releaseclojars

例如,对于尚未在 maven Central 上部署但在 java.net项目 kenai repo上找到的 rome v1.0,您必须在 project.clj 中输入以下内容:

...
:dependencies [[rome/rome "1.0"] ...]
:repositories {"kenai" "http://download.java.net/maven/2/"}
...
于 2011-02-18T12:48:17.207 回答
2

好吧,Leiningen 或任何其他依赖项管理工具的全部意义在于它为您管理您的依赖项。这些依赖项位于单独的工件存储库中,这些存储库比源代码控制系统更适合处理软件工件的公共版本。Leiningen 搭载了 Maven(一个填充 java 构建/依赖管理工具)存储库系统;但是,也有 Clojure 特定的工件存储库。

无论如何,重点是您在 project.clj 中声明项目具有的依赖项,并将该 project.clj 文件检查到源代码控制中。其他开发人员检查它并运行“lein deps”来拉下这些依赖项,瞧!

于 2011-02-18T04:50:10.080 回答