You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maven构建流程中排除指定的*.java文件

Maven构建排除指定文件失效解决方案

原有方案失效原因

  • 方案1:maven-war-plugin的webResources配置仅用于处理web静态资源(默认对应src/main/webapp目录内容),对Java源码的编译、打包逻辑无作用,配置Java目录排除规则不生效。
  • 方案2:packagingExcludes仅在打war包阶段过滤class文件,需配置在打war包的子模块中才会生效,且无法跳过编译阶段,若被排除类存在语法错误或被其他类依赖,仍会导致构建失败。
  • 方案3:子模块maven-compiler-plugin配置了combine.self="override",直接覆盖了父pom中配置的所有排除规则,导致父pom的排除配置失效。

正确解决方案

场景1:编译阶段直接跳过指定类(推荐,可避免冗余编译和依赖报错)

删除子pom中maven-compiler-plugin的combine.self="override"配置,将排除规则直接写在打war包的子模块pom中,需保留个别类时可补充includes规则:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <source>1.8</source>
        <target>1.8</target>
        <excludes>
            <exclude>com/<NDA>/<NDA>/server/<NDA>/controller/**/*.java</exclude>
            <exclude>com/<NDA>/<NDA>/server/<NDA>/dao/**/*.java</exclude>
            <exclude>com/<NDA>/<NDA>/server/<NDA>/jobs/**/*.java</exclude>
            <exclude>com/<NDA>/<NDA>/server/<NDA>/model/**/*.java</exclude>
            <exclude>com/<NDA>/<NDA>/server/<NDA>/service/dto/rq/**/*.java</exclude>
        </excludes>
        <!-- 需要保留个别类时打开,替换为实际类路径 -->
        <!--
        <includes>
            <include>com/<NDA>/<NDA>/server/<NDA>/controller/RequiredClass.java</include>
        </includes>
        -->
    </configuration>
</plugin>

场景2:需编译指定类,仅打包时排除

将packagingExcludes配置放在打war包的子模块中,多个路径用英文逗号直接分隔,避免换行和多余空格导致识别失败:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.2</version>
    <configuration>
        <webResources>
            <!-- 保留原有webResources配置 -->
            <resource>
                <directory>${basedir}/src/main/webapp-${app.face}</directory>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>${basedir}/src/main/webapp</directory>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>${basedir}/src/main/webappf</directory>
                <filtering>true</filtering>
            </resource>
        </webResources>
        <packagingExcludes>WEB-INF/classes/com/<NDA>/<NDA>/server/<NDA>/controller/**,WEB-INF/classes/com/<NDA>/<NDA>/server/<NDA>/dao/**,WEB-INF/classes/com/<NDA>/<NDA>/server/<NDA>/jobs/**,WEB-INF/classes/com/<NDA>/<NDA>/server/<NDA>/model/**,WEB-INF/classes/com/<NDA>/<NDA>/server/<NDA>/service/dto/**</packagingExcludes>
    </configuration>
</plugin>

验证方式

  1. 执行mvn clean compile,查看target/classes对应包路径下的class文件是否符合排除规则
  2. 执行mvn clean package,解压生成的war包,查看WEB-INF/classes下的文件是否符合预期

内容的提问来源于stack exchange,提问作者HtmlMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:39:02