maven:使用相同的pom文件生成几个“工件”?

时间:2012-04-24 13:22:09

标签: maven

我有一个项目here,目前使用一个pom.xml(link)生成一个“工件”。

我想做的是将项目拆分为:p,进入:

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

我想要这样做的原因是依赖性:p-format仅在卷中占据了70%以上,而且JSON Schema的许多用法无论如何都需要格式支持。

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

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

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

如果您只是将p格式分解为依赖于p-core的单独项目,那么您的生活会更容易。

虽然有方法可以为每个项目发布多个工件,但是Maven是围绕每个pom /模块一个工件设计的(加上测试工件)。根据经验,巧妙地尝试解决这个设计点 最终将最终咬你 - 通常以6个月后的问题形式出现,包装无法在某人的机器上正常运行。

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

答案 2 :(得分:3)

您可以使用maven-assembly插件(http://maven.apache.org/plugins/maven-assembly-plugin/)。 如果两个工件具有重叠的类并且更新一个总是需要更新另一个,那么这是一个不错的选择。

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

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

答案 3 :(得分:0)

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

我假设p有一个单独的源,并且p-core和p-format都是从它生成的。所以你应该为带有子模块(带有它们各自的POM)的p创建一个父POM - 一个用于'core',一个用于'format',但是这两个来自父的/ src /。

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

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

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