Maven发布并重组了POM系列

时间:2015-06-05 09:50:31

标签: maven maven-release-plugin

我在公司特定的maven结构中运行Maven发布插件时遇到了一些问题。让我解释一下我所指的重构家庭的概念。我的项目是多模块项目,其中每个模块可能有一个不同于父亲的父项。

project/
    pom.xml (the natural multimodule reactor father) (I list as modules all that follows)
    module1/pom.xml (my parent is NOT ../pom.xml, I'm a half sibling)
    module2/pom.xml (my parent is ../pom.xml, I'm a natural child) (I have a dependency on module1)
    project-war/pom.xml (my parent is NOT ../pom.xml, I'm a half sibling)

我们采用这种“寄养父母”策略的原因是,我们希望默认为某些特定的“采用的兄弟姐妹”激活一些插件。例如,每个WAR项目都需要定义特定的maven-resource-plugin执行ID。由于我们要生成大约80个WAR,因此如果我们要为所有WAR添加额外的执行步骤,请想象维护。这适用于开发目的,我们确实有有效且正在运行的SNAPSHOTs构建和部署。

现在我们要发布,maven-release-plugin似乎不喜欢这个特定的结构。简而言之,由于module2需要module1,但module1有不同的父亲,release插件会将module1保持为SNAPSHOT。

我的问题是,有没有人设法与重组家庭成员一起发布项目?我是否需要在发布插件中进行任何配置才能完全发布此类项目?

2 个答案:

答案 0 :(得分:2)

违反模块之间的继承是父母会给你带来比其他任何问题更多的问题。

这里唯一的选择是:

  • 修复父子模型,以便发布插件可以完成其工作(然后将这些模块激活移动到您想要的子项)。
  • 手动执行标记,更改版本,构建+发布(mvn部署以及可选地还有站点部署)

答案 1 :(得分:0)

经过一些进一步的测试,这是我对这个问题的结论。

Maven可以在一个简单的条件下解决重组家庭:该家族的所有成员都在反应堆中。

这意味着拥有一个超级反应堆"它既可以引用您要发布的项目,也可以引用某些模块可能声明的父poms。当然,发布插件将释放这个超级反应堆中的所有内容。如果你有许多项目都引用相同的父项目,你应该一次性发布它们。

此外,要正确生成构建模型,所有相对路径必须正确。在我的具体情况下,我们想避免这样的事情,我想我们回到设置一个固定的文件夹结构。

从发布插件中排除某些项目可能很方便,但这当然会造成潜在的不稳定。