在完成大型多模块项目时,我发现了一个自定义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 documentation将include
部分描述为“文件和/或目录模式,用于匹配在解压缩时从存档中包含的项目。”
includes
的{{1}}属性documentation声明如下:
如果不存在,则表示所有有效值。
dependencySet
是否独占?因此,我是否可以将仅 include
视为defaults*.properties
(根据此特定部分)?
provided
如何干扰基本unpackOptions-includes
(includes
的最后一部分)?
答案 0 :(得分:1)
unpackOptions-includes
如何干扰基本includes
(dependencySet
的最后一部分)?
他们控制着两种非常不同的东西,不会干扰在一起:
unpackOptions
中包含控制工件内的哪些文件要解压缩。在您的示例中,这意味着,在具有范围provided
的每个依赖项中,只有与模式defaults*.properties
匹配的文件才会被解压缩并因此保留。dependencySet
控件中包含哪些工件包含在此集合中。在您的示例中,只有与${project.groupId}:[project]-settings
匹配的工件才会包含在此集合中。最后,您拥有的程序集描述符将考虑每个provided
依赖项,其名称与${project.groupId}:[project]-settings
匹配。在每个工件中,它将解压缩与模式defaults*.properties
匹配的所有文件。
include
是否独占?
是。默认情况下,包含所有内容。如果覆盖该配置,那么将包含的内容是您在此标记中配置的内容。同样,默认情况下,不会排除任何内容(如果您覆盖该配置,请注意,排除规则适用于之前包含的内容)。