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

时间:2010-11-11 14:46:41

标签: java maven-2 pom.xml

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

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

我们是否可以通过Maven提供/强制执行这些设置和属性?这几乎就像给每个项目一个父pom.xml,但我不希望(也不能)让所有这些项目引用相同的父pom。

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

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

对于依赖项,您可以使用“dependencyManagement”import bloc(但它只能用于依赖项,而不能用于属性,等等。)

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

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

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

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.mycompany.mylibrary</groupId>
            <artifactId>mylibrary-artifact</artifactId>
            <version>mylibrary-version</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        ...

检查online maven documentation

答案 3 :(得分:3)

  

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

我并不是说必须把所有东西放在父POM中,但是在企业环境中,拥有顶级企业POM真的是个好主意(如maven书的3.6.2.2. Multi-module Enterprise Project 部分所示) ),有自己的发布周期。

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

答案 4 :(得分:2)

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