8

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

目前,这些最佳实践记录在我们公司的 wiki 上,但是当“最佳实践”列表发生变化时,这些变化很少反映在项目 pom 中,直到出现问题。人性就是这样,一切......

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

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

4

5 回答 5

9

唯一的 Maven 解决方案是一个共同的父母。也许如果您使用“已释放”的父母,您可以做到吗?

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

于 2010-11-11T14:57:45.767 回答
4

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

于 2010-11-11T17:38:29.600 回答
4

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

对于依赖项,您可以使用“dependencyManagement”导入块(但它仅适用于依赖项而不适用于属性等)。

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

然后在项目的主 pom 中,将该依赖项部分导入“dependencyManagement”部分:将导入库 pom 中定义的每个依赖项。此外,在此dependencyManagement 中定义的每个版本都将始终被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>
        ...

查看在线 maven 文档

于 2012-10-03T13:07:30.297 回答
3

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

我并不是说一定要把所有东西都放在一个父 POM 中,而是在一个公司环境中,拥有一个顶级的公司 POM 确实是一个好主意(如 3.6.2.2 节所示。maven的多模块企业项目书),有自己的发行周期。

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

于 2010-11-11T15:55:33.097 回答
2

如果没有主 pom,就没有技术方法可以强制执行您的要求(而且每个项目一开始也不会很好地应对它)。随着时间的推移,保持最佳实践得到执行的唯一有效方法是让某人的工作来执行。您可以将其传播给许多人(例如,通过将其添加到他们的工作描述中),但这往往会使其被遗忘,因为每个人都会假设其他人正在这样做。一个人,按名字识别,不会有推卸责任。

于 2010-11-11T14:58:00.220 回答