5

假设我在 leiningen 项目中使用了一个库,托管在 Clojars 上。我遇到了一个错误。我在 Github 上 fork 项目,并修复了错误。怎么办?

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

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

4

2 回答 2

6

我的过程:

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

当您只是在那里挖掘以修复错误时,很容易将大量“样式修复”应用于项目。如果您想这样做,请尝试项目维护者合作,因为他们长期参与其中,并且对代码投入更多情感。

于 2013-07-05T23:31:21.523 回答
6

如果您只想在本地使用修改后的版本,您可以按照 Arthur 的流程一直到“测试我的程序”步骤。如果您正在开发一个应用程序,该应用程序将与其依赖项一起打包以进行部署(lein uberjar例如,使用 ),这很好。您可能还想使用 Leiningen 的检出功能来并行处理您的主项目和修改后的库(记录在Leiningen 的教程中——链接到当前 2.2.0 版本的版本)。

如果您希望修改后的版本可以在公共 Maven 存储库中访问,则可接受的做法(实际上,对于这个特定用例而不是其他用例鼓励)是发布具有原始工件 id 和组 id 的项目版本的org.clojars.{your-clojars-account-name}

例如,如果您想发布您自己的项目版本,其中foo包含,您可以将其形式更改为发布前。然后你可以在你的项目中依赖。(defproject foo "upstream-version" ...)project.cljdefproject(defproject org.clojars.kendallb/foo "your-version" ...)[org.clojars.kendallb/foo "your-version"]

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

至于将您的更改合并到上游,亚瑟的过程是完全合理的。

于 2013-07-05T23:54:11.483 回答