跨不相关项目分享Maven pom.xml部分内容的最佳方式?

我们公司已经定义了一些关于Maven poms的“最佳实践”。 例如,为资源处理指定utf-8,要进行过滤的文件夹,处理unit testing与集成测试以及编译器设置。

现在,这些最佳实践记录在我们公司的维基上,但是当“最佳实践”列表发生变化时,这些变化很少反映在项目poms中,直到出现问题。 人性是它的本质和所有……

我们可以通过某种方式通过Maven提供/实施这些设置和属性吗? 这几乎就像给每个项目一个父pom.xml,但我不希望(也不能)让所有这些项目引用相同的父pom。

我们需要一种适用于开发人员机器以及Hudson CI服务器的方法。

唯一的maven解决方案是共同的父母。 也许如果你使用’已发布’的父母,你可以做到吗?

创建一个只包含父pom的项目,然后运行release插件,将其发布到内部存储库。 然后使用该父项作为所有项目的父项,让它们从您的仓库下载而不是通过相对路径名找到它?

您可以使用满足公司最佳实践的设置来构建maven项目原型。 它是“提供”而不是“强制”解决方案,可能还不够(取决于那些最佳实践的真正含义)。 http://maven.apache.org/guides/mini/guide-creating-archetypes.html

(这是一个旧线程,我只是添加此信息以供参考)

对于依赖项,您可以使用“dependencyManagement”import bloc(但它仅适用于依赖项而不是属性,依此类推)。

只需要像往常一样定义各种依赖关系的“库”pom(使用它们的排除和特定版本)。

然后在项目的主要pom中,您将该依赖项部分导入到“dependencyManagement”部分:将导入库pom中定义的每个依赖项。 而且,此依赖项管理中定义的每个版本将始终由Maven使用(Maven不会采用另一个版本,而不是在dependencyManagement中定义的版本)。 如果您有各种依赖于相同库集的项目,则几乎必须管理您的类路径。

在主项目的pom中,像这样导入库pom:

   com.mycompany.mylibrary mylibrary-artifact mylibrary-version pom import  ... 

查看在线maven文档

这几乎就像给每个项目一个父pom.xml,但我不希望(也不能)让所有这些项目引用相同的父pom。

我并不是说必须把所有东西都放在父POM中,而是在企业环境中,拥有一个顶级企业POM真的是个好主意(如第3.6.2.2节所述.Maven的多模块企业项目本书),有自己的发布周期。

但这不足以强制执行任何内容,我的建议是查看提供现有规则的Maven Enforcer插件 ,还允许使用maven-enforcer-rule-api编写自己的自定义规则。 我不能评论你可以用自定义规则走多远。 无论如何,我强烈推荐这个插件。 如果你还没有使用它,那肯定是时候开始:)

如果没有掌握主人,就没有技术方法可以强制执行你所要求的东西(并且每个项目也不会在最初处理它)。 随着时间的推移,保持最佳实践的唯一有效方法是让某人的工作成为执行者。 你可以将它传播给许多人(例如,通过将其添加到他们的工作描述中),但这往往会让人们忘记它,因为每个人都会认为其他人正在这样做。 一个人,通过名字确定,并且不会有任何反对。