我有以下正则表达式:
.*(?<!min)(\.css)
这意味着匹配所有未缩小的CSS文件。这个正则表达式在Java regex tester上测试时有效。但是,在将其与Maven WAR插件的<packagingExcludes/>
配置参数一起使用时,它不起作用。我用它如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<packagingExcludes>
<![CDATA[
%regex[.*(?<!min)(\.css)]
]]>
</packagingExcludes>
</configuration>
</plugin>
Maven WAR插件是否支持负面的后置正则表达式?如果是这样,我该如何使用它。
答案 0 :(得分:2)
您不需要CDATA。使用此:
<packagingExcludes>
%regex[.*(?<!min)(\.css)]>
</packagingExcludes>
'<' is equal to the sign '<'
答案 1 :(得分:0)
如果你可以通过命名你的CSS文件来避免它,而除之外的任何.
个字符用于扩展部分(.css
或.min.css
),那么你就不要#39;需要消极的观察;这样做:
^[^.]+\.css$
(我无法记住是否需要锚点。我已将它们放入。)
否则,是否支持负向后备取决于所使用的RE库。 Java内置的一个支持支持该功能(因为它是PCRE派生的),但其他一些人并不支持。鉴于Java已经支持它,它至少有合理的可能性。
足够值得尝试而不是努力提前猜测它。
答案 2 :(得分:0)
我之前删除的答案是错误的。
实际问题是您的XML中有一个结束括号太多。在最后一行,您只需要两个右括号而不是三个(]]>
而不是]]]>
)
在我的计算机上测试它时工作正常:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<packagingExcludes>
<![CDATA[
%regex[.*(?<!min)(\.css)]
]]>
</packagingExcludes>
</configuration>
</plugin>
我正在使用Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800)
和插件版本2.4
。我尝试了jdk1.6.0_65和jdk1.8测试版,并获得了相同的结果。我使用您在上面的问题中更新的插件声明获得了相同的结果。
我有一个几乎空洞的战争项目,只有src/main/webapp
文件夹中的两个文件:my.css
和my-min.css
。
我运行的命令是mvn clean install && jar tvf target/testweb-0.1.war
(项目和artifactID称为testweb
)
输出结果为:
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
my-min.css
WEB-INF/web.xml
META-INF/maven/testweb/testweb/pom.xml
META-INF/maven/testweb/testweb/pom.properties
因此它排除了my.css
,但它包括my-min.css
。
您的项目结构是什么样的?