5

出于教育目的,我设置了一个像这样的项目布局(为了更好地适应 eclipse):

-product
 |
 |-parent
 |-core
 |-opt
 |-all

Parent 包含一个带有 core、opt 和 all 的聚合项目。核心实现了应用程序的强制部分。Opt 是可选部分。All 应该将 core 与 opt 结合起来,并将这两个模块列为依赖项。

我现在正在尝试制作以下工件:

  1. 产品-core.jar
  2. 产品核心src.jar
  3. product-core-with-dependencies.jar
  4. 产品-opt.jar
  5. 产品-opt-src.jar
  6. product-opt-with-dependencies.jar
  7. 产品-all.jar
  8. 产品-all-src.jar
  9. product-all-with-dependencies.jar

它们中的大多数都相当容易生产。不过,我确实对聚合工件有一些问题。我已经设法在“all”模块中使用自定义程序集描述符制作了 product-all-src.jar,该模块下载了所有非传递 deps 的源代码,并且效果很好。这种技术还允许我制作 product-all-with-dependencies.jar。

然而,我最近发现你可以在源插件中使用 source:aggregate 目标来聚合整个聚合项目的源。对于 javadoc 插件也是如此,它也通过父项目的使用进行聚合。

所以我在我的“所有”模块方法和放弃“所有”模块之间,只使用“父”模块进行所有聚合。在 'parent' 中产生一些聚合工件,而在 'all' 中产生其他工件感觉不干净。有没有办法在父项目中制作“product-all”jar,或者在“all”项目中聚合 javadoc?还是我应该两个都保留?

谢谢

4

2 回答 2

5

扁平的树不再经常使用。这是几年前为了处理 Eclipse 如何处理项目以及缺乏良好的 Maven 和 Eclipse 集成而完成的。如果您使用 m2eclipse 将 Maven 项目导入到 Eclipse 中,那么对于典型的 maven 嵌套树将不会有任何问题。

至于如何构建 Maven 构建的一个很好的例子是什么?Maven 项目源代码本身。它拥有您想要的所有部件,包括打包捆绑包的最终组件。

典型的嵌套结构具有自上而下的层次结构,其中父级对其下的模块进行聚合,子级从父级继承值。尽管这些可以而且有时是分开的,但这不是常态。

于 2010-06-06T02:08:33.503 回答
0

我建议只保留“全部”的程序集描述符,将其移动到 parent/ 并相应地更改 parent/pom.xml,然后通过执行类似mvn -f parent/pom.xml assembly:assembly. 换句话说,是的,删除“all”的冗余项目,因为它只是复制“parent”已经在做的事情。

附带说明一下,如果该项目是一个聚合项目而不仅仅是父 pom.xml,那么“父”似乎是一个糟糕的命名选择。

[编辑]

虽然是一个大得多的项目,但也许按照您的设想布置的项目是 apache camel 项目。在这里查看:http: //camel.apache.org/source.html。有一个 parent/ 模块处理所有其他所有内容,以及一个用于在 apache-camel/ 中生成实际构建分布的单独模块(在 apache-camel/src//main/descriptors 中具有程序集描述符)。也许这会更有帮助。

于 2010-05-12T22:54:36.027 回答