Maven是否支持<packagingexcludes> </packagingexcludes>中的负面lookbehind正则表达式

时间:2014-02-08 08:49:09

标签: java regex maven

我有以下正则表达式:

.*(?<!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插件是否支持负面的后置正则表达式?如果是这样,我该如何使用它。

3 个答案:

答案 0 :(得分:2)

您不需要CDATA。使用此:

<packagingExcludes>
%regex[.*(?&lt;!min)(\.css)]>
</packagingExcludes>


'&lt;' 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.cssmy-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

您的项目结构是什么样的?