程序集描述符:Unpack-include exclusive?

时间:2015-10-16 08:25:51

标签: maven maven-assembly-plugin

描述

在完成大型多模块项目时,我发现了一个自定义Assembly Descriptor文件。我不完全理解的是以下内容,尤其是includes部分。

<assembly [...]>
    [...]
    <dependencySets>
        <dependencySet>
            <scope>provided</scope>
            <unpack>true</unpack>
            <unpackOptions>
                <includes>
                    <include>defaults*.properties</include>
                </includes>
            </unpackOptions>
            <outputFileNameMapping>
                ${artifact.artifactId}
            </outputFileNameMapping>
            <includes>
                <include>${project.groupId}:[project]-settings</include>
            </includes>
        </dependencySet>
    </dependencySets>
    [...]
</assembly>

assembly documentationinclude部分描述为“文件和/或目录模式,用于匹配在解压缩时从存档中包含的项目。”

includes的{​​{1}}属性documentation声明如下:

  

如果不存在,则表示所有有效值。

问题

dependencySet是否独占?因此,我是否可以将 include视为defaults*.properties(根据此特定部分)?

provided如何干扰基本unpackOptions-includesincludes的最后一部分)?

1 个答案:

答案 0 :(得分:1)

  

unpackOptions-includes如何干扰基本includesdependencySet的最后一部分)?

他们控制着两种非常不同的东西,不会干扰在一起:

  • unpackOptions中包含控制工件内的哪些文件要解压缩。在您的示例中,这意味着,在具有范围provided的每个依赖项中,只有与模式defaults*.properties匹配的文件才会被解压缩并因此保留。
  • dependencySet控件中包含哪些工件包含在此集合中。在您的示例中,只有与${project.groupId}:[project]-settings匹配的工件才会包含在此集合中。

最后,您拥有的程序集描述符将考虑每个provided依赖项,其名称与${project.groupId}:[project]-settings匹配。在每个工件中,它将解压缩与模式defaults*.properties匹配的所有文件。

  

include是否独占?

是。默认情况下,包含所有内容。如果覆盖该配置,那么将包含的内容是您在此标记中配置的内容。同样,默认情况下,不会排除任何内容(如果您覆盖该配置,请注意,排除规则适用于之前包含的内容)。