Nei*_*nin 5 java spring maven git-fork
我有一个 java spring web 应用程序 WebappA,它使用 LibraryY。LibraryY 使用另一个库 LibraryZ。
LibraryY 和 LibraryZ 都是具有可分叉 github 存储库的 OSS。
我想更改 LibraryZ 中的某些内容,以便我的更改可以被推回原始存储库。
使用 Maven 和 github 执行此操作的最佳路径是什么?行家方式是什么?
我将 Y 和 Z 克隆到我的机器上,并在每个机器上运行 mvn install 。他们各自构建,并生成了 jar,这很好,但 WebappA 依赖于 RELEASE 构建,所以我在 ~/.m2/[...] 中创建 *-SNAPSHOT 构建没有任何作用。我认为?这很好。
我应该如何将源代码更改为 LibraryZ 以便 WebappA 在本地使用它?
我尝试将 LibraryZ 的版本号更改为“*-mybuild”,但它本身没有构建,因为它的子模块没有依赖项,将 LibrayZ 声明为其父模块,并且它们的“父模块”是由版本号引用的?我认为?
一位同事建议更改 LibraryZ 的 groupId,但我还没有尝试过,因为这似乎比更改所有这些 pom 文件中的所有版本号更疯狂。
看起来幸福的道路是通过更改版本号来更改数十个 pom 文件,但这似乎很疯狂且错误。
我觉得我错过了一些东西,因为这似乎不对。
对我的应用程序使用的 java 库的本地分支进行更改的 Maven 方法是什么?
谢谢!
-尼尔
您的问题有两个相当不同的方面:
关于 1.,假设您的起点是Z 的发布版本,例如 1.5.0,您将分叉 Z 的 master 或 trunk 分支,无论如何它很可能位于下一个快照版本,例如 1.5.1-SNAPSHOT。
如果您想从 1.5.0 基线开始,除了您自己的修改外不包括任何内容,并排除 Z master 中的任何其他最近更改,那么您将从 1.5.0 标记开始一个分支,并且必须更新Maven 版本为 1.5.1-SNAPSHOT(或任何您喜欢的 SNAPSHOT)。您可以使用mvn versions:set这样做。
使用<dependencyManagement>A 的 POM 部分将 Z 的版本设置为 1.5.1-SNAPSHOT。这将覆盖 Y 引用的 Z 版本。
这足以测试您的更改。然后,您可以向 Z 提交补丁或拉取请求,并希望您的更改将包含在他们的下一个版本中。如果是这种情况,只需将 Z 的版本升级dependencyManagement到 1.5.1(或任何下一个正式版本)。
如果 Z 项目不接受您的更改,或者您需要在下一个版本完成之前发布 A,那么您需要处理方面 2。
到目前为止,您已经有了自己的本地 1.5.1-SNAPSHOT,它与官方 Z 快照不同,这没关系,因为 Maven 快照无论如何都是不稳定的。
但是,您的 A 版本不能依赖于 Z 快照,并且所有版本(包括 Z 版本)都是不可变的,因此您不应该简单地构建 Z 分叉的本地版本并将其命名为 1.5.1,因为这与官方 Z 不同1.5.1 版本可能会在下周发布,也可能永远不会发布。
在这种情况下,常见的做法(例如在 WildFly/JBoss 社区项目中)保留官方版本groupId,artifactId但使用带有后缀的版本1.5.0-foo-1,例如 ,其中foo是与您的项目或组织相关的一些标识符。
如果您在分叉中发现错误,您可以进行后续发布1.5.0-foo-2,1.5.0-foo-3等等。
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |