来自Clojars的补丁库

时间:2013-07-05 23:08:58

标签: clojure leiningen clojars

假设我在leiningen项目中使用了一个库,托管在Clojars上。我遇到了一个错误。我在Github上分叉项目,修复bug。现在怎么样?

在我的leiningen项目中使用我的库版本最合适的方法是什么?

P.S。我来自Ruby世界,所以我显然已经想到了Bundler ......

2 个答案:

答案 0 :(得分:6)

我的过程:

  • 在github上挖掘项目
  • 将项目-0.1.2-SNAPSHOT中的版本更改为依赖项的project.clj中的project-0.1.2-arthur-SNAPSHOT
  • 修复错误
  • 运行“lein install”将我的前叉添加到我的本地仓库
  • cd到我的项目(使用依赖项的那个)
  • 将我的porject.clj更改为依赖于项目-0.1.2-arthur-SNAPSHOT
  • 测试我的程序
  • 向依赖的维护者提交拉取请求
  • 跳到IRC并与维护者讨论修复,并礼貌地询问我的编码风格是否符合他们对项目的愿景。 (这也有助于加速他们的合并)
  • 一旦他们合并修复程序,从名称中删除-arthur-并测试他们的SNAPSHOT分支
  • 请求他们释放修复的项目,以便您可以删除SNAPSHOT依赖项。
  • 当你在等待依赖项合并和释放时,你可以将你的分叉推到你的名字下的clojars,并使用一个版本字符串将它标识为你的分支(在我的情况下,我使用-arthur) - 。

当你只是在那里挖掘修复bug时,很有诱惑力将很多“样式修复”应用到项目中。如果你想这样做,请尝试项目维护人员一起工作,因为他们长期在其中并且在代码中投入更多情感。

答案 1 :(得分:6)

如果您只想在本地提供修改后的版本,可以按照Arthur的流程进行“测试我的程序”步骤。如果您正在处理一个应用程序,并将其与其依赖项打包在一起(使用lein uberjar,那么这很好)。您可能还希望使用Leiningen的签出功能来并行处理主项目和修改后的库(在Leiningen's tutorial中记录 - 链接到当前2.2.0版本中的版本)。

如果您希望可以在公共Maven存储库中访问您的修改版本,那么接受的事情(实际上,鼓励这个特定用例而不是其他用户)是使用原始artefact id发布项目版本,组ID为org.clojars.{your-clojars-account-name}

例如,如果您希望在其foo中使用(defproject foo "upstream-version" ...)发布自己的项目版本project.clj,则会将其defproject表单更改为{{1在发布之前。然后,您可以依赖项目中的(defproject org.clojars.kendallb/foo "your-version" ...)

这样就不会与原始的人工制品ID或任何其他的叉子发生任何冲突。

至于让您的变更合并到上游,Arthur的流程非常合理。