如何在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>
验证方式
- 执行
mvn clean compile,查看target/classes对应包路径下的class文件是否符合排除规则 - 执行
mvn clean package,解压生成的war包,查看WEB-INF/classes下的文件是否符合预期
内容的提问来源于stack exchange,提问作者HtmlMan
相关产品推荐
相关产品推荐

