我有一个使用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
最佳答案 您的问题有两个相当独立的方面:
>如何确保您的应用A和库Y使用Z的分叉版本.
>如何避免你的fork和Z的官方版本之间的混淆.
关于1.,假设您的起点是Z的发布版本,比如说1.5.0,你可以分叉Z的主分支或者主干分支,这可能是下一个快照版本,比如1.5.1-SNAPSHOT.
如果你想从1.5.0基线开始,包括你自己的修改,并且不包括Z master的任何其他最近的更改,那么你将从1.5.0标签开始一个分支,你必须更新Maven版本为1.5.1-SNAPSHOT(或任何你喜欢的SNAPSHOT).您可以使用mvn版本:set来执行此操作.
使用< dependencyManagement> A的POM部分将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)都是不可变的,因此您不应该简单地构建Z fork的本地版本并将其称为1.5.1,因为这与官方Z不同1.5.1释放可能发生在下周,或者可能永远不会发生.
在这种情况下,通常的做法(例如在WildFly / JBoss社区项目中)保留官方的groupId和artifactId,但使用带有后缀的版本,如1.5.0-foo-1,其中foo是与项目相关的一些标识符或组织.
如果你发现你的分支中的bug,你可以做后续版本1.5.0-foo-2,1.5.0-foo-3等.