我有一个使用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
答案 0 :(得分:2)
您的问题有两个相当独立的方面:
关于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社区项目中)保留官方groupId
和artifactId
,但要使用带有1.5.0-foo-1
后缀的版本,其中foo
是与您的项目或组织相关的标识符。
如果您发现分叉中的错误,您可以执行后续发布1.5.0-foo-2
,1.5.0-foo-3
等。