使用本地货叉的方式是什么?

时间:2015-04-03 05:35:40

标签: java spring maven git-fork

我有一个使用LibraryY的java spring webapp,WebappA。 LibraryY使用另一个库LibraryZ。

LibraryY和LibraryZ都是带有forkable github repos的OSS。

我想改变LibraryZ中的某些内容,以便我可以将我的更改推回到原始仓库。

使用maven和github做这件事的快乐路径是什么?什么是maven方式?

我git克隆了Y和Z到我的机器,我在每个机器上运行了mvn install。它们各自构建,并且生成了jar,并且它很好,但WebappA依赖于RELEASE构建,所以我在〜/ .m2 / [...]中制作* -SNAPSHOT构建没有做任何事情。我认为?哪个没问题。

我应该如何将源代码更改为LibraryZ,以便WebappA在本地使用它?

我尝试将LibraryZ的版本号更改为“* -mybuild”,但后来它本身没有构建,因为它的子模块没有依赖关系,将LibrayZ声明为其父级,并且它们的“父级”被引用版本号?我想?

一位同事建议更改LibraryZ的groupId,但我没有尝试过,因为这似乎比更改所有这些pom文件中的所有版本号更加疯狂。

看起来快乐的道路正在改变数十个pom文件,并且版本号发生了变化,但这看起来很疯狂和错误。

我觉得我错过了什么,因为那似乎不对。

对我的应用程序使用的java库的本地分支进行更改的maven方法是什么?

谢谢!

-neil

1 个答案:

答案 0 :(得分:2)

您的问题有两个相当独立的方面:

  1. 如何确保您的应用A和库Y使用Z的分叉版本。
  2. 如何避免您的分叉和Z的官方版本之间的混淆。
  3. 关于1.,假设你的起点是Z的发布的版本,比如1.5.0,你会分叉Z的主分支或者主分支,这可能是下一个快照无论如何,请说1.5.1-SNAPSHOT。

    如果你想从1.5.0基线开始,包括你自己的修改,并且不包括Z master的任何其他最近的更改,那么你从1.5.0标签开始一个分支,你&# 39; d必须将Maven版本更新为1.5.1-SNAPSHOT(或任何你喜欢的SNAPSHOT)。您可以使用mvn versions:set来执行此操作。

    使用A&#POM的<dependencyManagement>部分将Z的版本设置为1.5.1-SNAPSHOT。这将覆盖Y引用的Z版本。

    这足以测试您的更改。然后,您可以向Z提交补丁或拉取请求,并希望您的更改将包含在他们的下一个版本中。如果是这种情况,那么只需将您的dependencyManagement中的Z版本升级到1.5.1(或者下一个正式版本)。

    如果Z项目不接受您的更改,或者您需要在完成下一个版本之前发布A,那么您需要处理方面2。

    到目前为止,您拥有自己的本地1.5.1-SNAPSHOT,这与官方Z快照不同,这是好的,因为Maven快照无论如何都是易变的。

    但是,您的A版本不能依赖于Z快照,并且所有版本(包括Z&#39; s)都是不可变的,因此您应该简单地构建Z fork的本地版本称之为1.5.1,因为这与官方的Z 1.5.1版本不同,后者可能在下周发生,或者可能永远不会发生。

    在这种情况下,通常的做法(例如在WildFly / JBoss社区项目中)保留官方groupIdartifactId,但要使用带有1.5.0-foo-1后缀的版本,其中foo是与您的项目或组织相关的标识符。

    如果您发现分叉中的错误,您可以执行后续发布1.5.0-foo-21.5.0-foo-3等。