【问题标题】:What is the right approach for assemblying module resources in Maven project?在 Maven 项目中组装模块资源的正确方法是什么?
【发布时间】:2010-03-26 03:53:27
【问题描述】:

我有一个类似的项目结构

module-a/src/main/java
module-a/src/main/styles
module-distribution/src/main/assembly

module-distribution 依赖于 module-a,它们共享父 pom 并作为模块包含在该父 pom 中。

这个想法是有一个像这样的装配布局

my-final-assembly/lib
my-final-assembly/styles

其中 lib 目录包含所有项目工件,包括依赖项(即 module-a.jar 及其依赖项 jar),并且 module-a.jar 不应包含其样式目录。样式目录应位于 my-final-assembly/styles 中。

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

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

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

  1. 将其包含在 module-a 工件中(它将驻留在 module-a.jar 中)
  2. 不要将其包含在 module-a.jar 中。

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

我最后的办法是为样式目录内容创建一个单独的模块,并让 module-a 依赖它,但这对我来说似乎有点矫枉过正。尽管在这种情况下调整我的程序集文件以获得我想要的东西很容易。但是对于单个模块需要的一堆字体和 xmls 的单独模块?那将是可悲的,尽管如果这就是你所说的 Maven 方式,我已经准备好了。

【问题讨论】:

    标签: maven-2 maven-assembly-plugin


    【解决方案1】:

    不知何故,您必须在某个时候将样式放入工件中,以便能够将它们拉出并包含在“最终组装”中。我可以想到 3 种方法:

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

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

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

    【讨论】:

    • 感谢您的提示,帕斯卡!该项目有一堆依赖,module-a 不是唯一的,因此我选择了第二种方法。我用程序集 id "with-styles" 打包 module-a.zip: module-a-with-styles.zip/lib/module-a.jar, module-a-with-styles.zip/styles 然后经过一些调整final-assembly.xml 我得到了我的预期。顺便说一句,发布我的工作解决方案的详尽细节作为问题的答案,以便每个人都能看到,这是一种常见的做法吗?此评论区不允许漂亮的格式
    • @zamza 不客气。关于您的问题,您的实现可能有点具体,但如果您认为它可以被其他人重用,请不要犹豫。具体与否,它不会受到伤害。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2019-05-21
    • 2011-06-13
    • 2020-04-09
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多