程序集描述符:独占解包?

Assembly descriptor: Unpack-include exclusively?

描述

在处理大型多模块项目时,我发现了一个自定义 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 部分描述为“文件 and/or 目录模式,用于在解压缩时从存档中包含匹配项目”。

dependencySetincludes 属性 documentation 声明如下:

If none is present, then represents all valid values.

问题

include 是否独占?因此,我是否可以期望 只有 defaults*.properties 被视为 provided(根据此特定部分)?

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

How do unpackOptions-includes interfer with the basic includes (last section of dependencySet)?

他们控制着两种截然不同的事物,互不干扰:

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

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

的文件

Does include work exclusively?

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