Precedence packagingExcludes和packaging包括maven war插件

时间:2015-07-14 13:01:14

标签: java regex maven maven-3 maven-war-plugin

最近我将我的应用程序配置为使用codehaus(标题:解决瘦小的战争问题)中描述的“瘦战”。基本上我将战争中的所有罐子排除在外,并将其作为战争 pom依赖项添加到耳朵中。现在我遇到了两个罐子的问题。所以对我来说,合乎逻辑的做法是使用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 documentationanswer中显示的正则表达式,但它似乎没有做任何事情。它只是排除了所有人。

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

我认为这不是一件容易的事。但是我做错了什么?当A也是C的传递依赖时,是否包含不起作用?

编辑:插件版本是否扮演任何角色?现在我使用2.6但之前使用的版本是2.1-alpha-2。

2 个答案:

答案 0 :(得分:1)

找到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文件夹中。应该可以在正则表达式中提取公共部分,但我尝试的并不起作用。

答案 1 :(得分:0)

尝试仅使用包含而不使用通配符排除定义。由于您排除了所有罐子,因此会占用您的包裹。据我了解文档(以及我的记忆),默认是包含所有内容,但只要您指定包含,插件就会只包含您的jar列表。