在Maven项目中组装模块资源的正确方法是什么?

时间:2010-03-26 03:53:28

标签: maven-2 maven-assembly-plugin

我有一个像

这样的项目结构
module-a/src/main/java
module-a/src/main/styles
module-distribution/src/main/assembly

模块分发依赖于module-a,它们共享父pom并作为父pom中的模块包含在内。

我们的想法是拥有像

这样的装配布局
my-final-assembly/lib
my-final-assembly/styles

其中lib目录包含所有项目工件,包括依赖项(即module-a.jar及其依赖项jar),而module-a.jar不应包含其styles目录。 styles目录应该驻留在my-final-assembly / styles中。

我可以轻松填写​​lib目录,包括

<dependencySet>
    <useProjectArtifact>false</useProjectArtifact>
    <outputDirectory>lib</outputDirectory>
</dependencySet>

在我的程序集文件中。但是模块-a / src / main / styles呢? 我可以

  1. 将它包含在模块中 - 一个工件(它将驻留在module-a.jar中)
  2. 不包含在module-a.jar中。
  3. 当然,1)和2)都对我无效。在第一种情况下,我必须以某种方式从我的module-a.jar中提取样式目录。在第二种情况下,样式目录根本不会被复制,因为只复制工件,而不是整个目标文件夹。

    我有最后的手段为样式目录内容创建一个单独的模块,并且make module-a依赖于它,但这看起来对我来说太过分了。虽然在这种情况下调整我的程序集文件以获得我想要的东西会很容易。但是单独模块需要一组单独的模块,用于一堆字体和xmls?如果那就是你所谓的Maven Way,那就太可悲了。

1 个答案:

答案 0 :(得分:1)

不知何故,你必须将样式放在一个工件中,以便能够拉动并将它们包含在“最终装配”中。我可以想到3种方法:

第一种方法就是你所描述的:将样式放在一个单独的模块中并使bot模块-a和模块分布依赖于它(实际上,我真的不明白为什么module-a依赖于它因为你没有在模块中使用它们/包含它们 - 这是一个神器,但这由你自行决定。)

第二种方法是保留当前结构,但为模块a创建一个中间组件。这个程序集将包含模块-a.jar 样式(或者可能只是样式)。然后,在模块分发中,您将拉动此程序集,将其解压缩并创建“最终程序集”。

第三种方法与前一种方法类似,只是最终组装将直接从module-a创建(不清楚模块分布是否具有除模块-a之外的其他依赖性;如果没有,则你可以从模块-a)做所有事情。