12

我在这里有一个项目,目前,它使用一个 pom.xml ( link ) 来生成一个“工件”。

我想做的是将项目(我们称之为 p)拆分为:

  • p-core,包含核心验证过程;
  • p-format,其中包含“format”关键字验证,这取决于p-core。

我想这样做的原因是依赖关系:p-format 仅在数量上就吸收了 70% 以上的内容,而且 JSON Schema 的很多使用都不需要格式支持。

我需要构建两个完全独立的项目,还是可以使用一个 pom.xml 来生成这两个工件?我想后者是可行的,因为很多项目已经这样做了(例如杰克逊)。

[如果它有任何重要性,我会通过 Sonatype 的 maven repo 发布]

4

4 回答 4

11

您应该创建两个独立的项目(两个独立的 POM),但可能一个好主意是为它们创建公共父级,并将它们聚合为模块。查看POM 简介的项目继承项目聚合部分了解一些基础知识。

在 Maven 中,尝试破解它绝不是一个好主意,因此它会从一个 POM 生成许多不同的工件。

于 2012-04-24T13:48:09.717 回答
3

如果您简单地将 p-format 分解为一个依赖于 p-core 的单独项目,您的生活将会轻松得多。

尽管有多种方法可以为每个项目发布多个工件,但 Maven 是围绕每个 pom/模块(加上测试工件)一个工件而设计的。根据经验,围绕这个设计点的巧妙尝试最终会咬你一口——通常是在 6 个月后出现问题,包装无法在某人的机器上正常工作。

您描述的场景非常适合多项目用例,我建议您顺其自然,让您未来的自我快乐。

于 2012-04-24T13:46:06.483 回答
3

您可以使用maven-assembly 插件。如果两个工件有重叠的类并且更新一个总是需要更新另一个,那么这是一个不错的选择。

您必须考虑工件的生命周期。两个工件是否需要具有相同的版本号?每当您修复 p 格式的错误时,您想发布新版本的 p-core 吗?p核本身有用吗?

我猜,程序集插件应该主要用于为同一个工件提供不同的包装。

于 2012-04-24T14:01:42.047 回答
0

我有一个类似的案例,我同意 Michal 的建议。但是,我想进一步扩展建议的解决方案:

我假设 p 有一个单一的来源,并且 p-core 和 p-format 都是从中生成的。因此,您应该为 p 创建一个带有子模块(及其各自的 POM)的父 POM——一个用于“核心”,一个用于“格式”,但这些都来自父的 /src/。

因此,基本上我们将“核心”和“格式”的构建过程分离以生成特定的工件,但不复制 p 的原始源。

Maven 支持但不推荐这种方法,但我不明白他们为什么不应该这样做。在我看来,它的结构化、干净和关注分离没有任何长期影响,没有更好的选择。

http://maven.apache.org/guides/mini/guide-using-one-source-directory.html

于 2013-05-09T08:17:58.573 回答