2013-03-16 35 views
2

我正在开发项目以自动化大量相互依赖的模块的maven发布。首先,该任务涉及获取内部依赖关系的最新版本。比起在需要之前构建每个项目的构建方式。希望这种组合能让我达到我点击批量发布的目标。在获取最新依赖关系时区分来自主干的maven发布/快照而不是来自分支的发布/快照

但是我最大的问题是: 我们不时地分支项目,我们会从该分支向Nexus回购管理器发布/快照。很显然,因为groupId和ArtifactId与trunk相同,所以来自trunk的Snapshots/Releases和来自分支的Snapshots/Releases最终会在nexus中的相同位置结束。

在我们拥有了projectA,树干1.1.x版本的 而且项目B→了projectA 1.1.x版本的 的情景所以,如果我使用的版本,插件以获得最新的依存关系B,我会得到最新的。 (完美)

但是,如果我稍后使用版本1.2.0分支ProjectA并添加我不希望projectB拾取或可能会破坏它的更改。 现在我下次运行projectB并使用版本插件获取最新版本,该插件将获得ProjectA的分支版本(1.2.0),因为它的数值最新。在那里,projectB构建失败。

我到目前为止尝试在工件中添加一个分类器来区分两者,但后来我意识到插件不会对分类器起作用。

这给了我这么多的挫折和欢迎任何提示或建议

回答

1

简单的使用了正确的分支/不同势神器的名字。您可以自动生成合适的神器名Maven Release plugin

mvn --batch-mode release:branch -DbranchName=my-branch-1.2 -Dproject.rel.org.myCompany:projectA=1.2 -Dproject.dev.org.myCompany:projectA=2.0-SNAPSHOT 
+1

嗨,感谢您抽出宝贵时间回复。我已经考虑过在不同的groupId下发布分支,但是因为这会使它成为一个不同的工件,我的团队领导不喜欢这个。其他解决方案? 谢谢 – Tekdev 2013-03-18 16:41:14

1

解决这个问题的方法是使用分支名称为版本分类的典型做法和方法也适用于到目前为止,我所看到的所有方案。你有什么问题呢?

+0

优秀的建议,这是我的第一个子弹。但是当我试图自动获取我的内部依赖关系的最新版本时,我的问题就开始了。我正在使用该作业的版本插件。我的测试表明,该插件取代了最新版本号的版本号,即使它没有对应于指定的分类器。然后,显然maven未能从当地的回购协议中解决某个GAV和分类器的问题。评估时,插件会忽略分类器筛选器(非常令人失望)。 我需要为我的内部依赖关系选择最新版本 – Tekdev 2013-03-18 22:23:43

+0

是的..自动化与版本插件将要求您控制它更紧密,而不是依靠计算的默认值。但是你可以使用例如一个外部脚本来执行版本更新,在其中设置newVersion参数,因此确保分类器不会丢失。或者你甚至可以修补插件以支持分类器如何工作或创建自己的自定义分支。所有这些都比尝试其他东西imho更好。 – 2013-03-18 22:47:46

+0

感谢Manfred,我一直都想着写一些脚本或者甚至是自己的插件来完成这项工作。但我有限的时间来完成这一点。我希望应该有一个人在这之前一直在这条路上,并有一个解决方案,因为我认为这是一个常见的障碍。我对这个限制感到非常惊讶。我甚至尝试了版本范围与版本插件相同的分类器方法。 Maven忽略了分类器。 – Tekdev 2013-03-18 23:31:36