最近我将我的应用程序配置为使用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 documentation和answer中显示的正则表达式,但它似乎没有做任何事情。它只是排除了所有人。
在插件的source code中,我发现它使用了org.codehaus.plexus的»DocumentScanner»plexus-utils。我不太明白它是如何工作的。
我认为这不是一件容易的事。但是我做错了什么?当A也是C的传递依赖时,是否包含不起作用?
编辑:插件版本是否扮演任何角色?现在我使用2.6但之前使用的版本是2.1-alpha-2。
答案 0 :(得分:1)
找到this answer。以下行(仅此行)有效:
<packagingExcludes>%regex[WEB-INF/lib/(?!common-A|common-B).*.jar]</packagingExcludes>
只有common-A-x.x.jar
和common-B-x.x.jar
位于war文件的WEB-INF/lib
文件夹中。应该可以在正则表达式中提取公共部分,但我尝试的并不起作用。
答案 1 :(得分:0)
尝试仅使用包含而不使用通配符排除定义。由于您排除了所有罐子,因此会占用您的包裹。据我了解文档(以及我的记忆),默认是包含所有内容,但只要您指定包含,插件就会只包含您的jar列表。