maven-war-plugin打包时忽略掉某些静态资源目录

2,377 阅读1分钟

公司的某些前端项目是使用Maven构建的,把静态资源和一些配置文件,jar包一起打成一个war包。然而,前端本地开发时,常常会安装很多依赖(在node_modules目录下),这些文件往往不需要打包进去。如何忽略掉这些文件和目录呢?

e.g. 目录结构如图:

打包时需要把src/main/webapps/mock 目录和内部的所有文件忽略掉。

一开始,打算使用maven的exclude标签来忽略,后来发现不起效果。查看插件的 官方文档。发现了一个属性:packagingExcludes可以达到这个效果。

示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.guojb.maven-demo</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                <!-- 重点 -->
                    <packagingExcludes>mock/*</packagingExcludes>
                    <webResources>
                        <resource>
                            <!-- this is relative to the pom.xml directory -->
                            <directory>resource2</directory>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

构建结果:

maven构建结果

构建产物
可见,没有mock目录

另外,要区分一下warSourceExcludes和packagingExcludes

packagingExcludes:复制完成后,打war包时忽略文件

warSourceExcludes:从源代码中copy文件到target目录时,就忽略文件

详见:官方文档