Precedence packagingExcludes 和 packagingIncludes maven war 插件

Precedence packagingExcludes and packagingIncludes maven war plugin

最近我将我的应用程序配置为使用 codehaus 上描述的 "skinny wars"(标题:解决瘦 war 问题)。基本上,我从 war 中排除所有 jar,并将其作为 war and pom 依赖项添加到耳朵。现在我运行 遇到了两个jar 的问题。所以对我来说合乎逻辑的做法是使用 packagingInclude.

将它们包含在 war 文件中
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
        <packagingIncludes>WEB-INF/lib/A.jar, WEB-INF/lib/B.jar</packagingIncludes>
    </configuration>
</plugin>

使用 de plugin documentation and this answer 中所示的正则表达式,但它似乎没有做任何事情。它只是排除一切。

在插件的 source code 中我发现它使用了 org.codehaus.plexus » plexus-utils 的 DocumentScanner。我不太明白它是如何工作的。

我认为这很简单。但是我做错了什么?难道当 A 也是 C 的 t运行sitive 依赖时,包含不起作用?

编辑:插件版本有什么作用吗?现在我使用的是 2.6,但之前使用的是 2.1-alpha-2 版本。

尝试使用仅包含而不使用通配符排除定义。因为你排除了所有的罐子,所以这会吃掉你的包含物。据我对文档的理解(以及我的记忆),默认设置是包含所有内容,但是一旦您指定包含,插件将只包含您的罐子列表。

也找到了 this answer。以下行(且仅此行)有效:

<packagingExcludes>%regex[WEB-INF/lib/(?!common-A|common-B).*.jar]</packagingExcludes>

只有 common-A-x.x.jarcommon-B-x.x.jar 在 war 文件的 WEB-INF/lib 文件夹中。应该可以提取正则表达式中的公共部分,但我试过没有用。