
maven 原生不支持直接通过 `
在标准 Maven 生命周期中,
真正可行的解决方案是转向“白名单优先”策略,即通过 maven-compiler-plugin 显式声明需编译的包路径,间接实现对冲突目录(如 src/main/java/com/company/project/conflict-dir)的逻辑排除:
org.apache.maven.plugins maven-compiler-plugin 3.8.0 ${maven.compiler.source} ${maven.compiler.target} UTF-8 com/company/my_module/**/*.java
✅ 关键说明: 是白名单机制,未匹配的 .java 文件(包括冲突目录下所有类)将被完全忽略,不参与编译; 路径格式为 Java 包路径风格(用 / 分隔,非文件系统路径),且必须相对于 sourceDirectory 根目录; 若需排除多个无关包,可添加多个 ,或使用更宽泛的模式(如 com/company/**/service/**/*.java)。
此外,在多模块项目中,还需警惕隐式行为带来的干扰:
- Maven 默认会执行 test 阶段,若当前模块未提供对应测试类,但父 POM 或继承链中启用了测试扫描,可能导致 ClassNotFoundException 或编译失败;
- 此时应显式跳过测试:构建时添加 -Dmaven.test.skip=true(跳过编译与执行),或在 POM 中配置:
org.apache.maven.plugins maven-surefire-plugin true
⚠️ 注意事项:
与 在 maven-compiler-plugin 中不可共存(后者在较新版本中已被弃用或行为不稳定),务必只用 实现精准控制; - 修改后请执行 mvn clean compile 验证,避免因旧 class 文件残留导致误判;
- 若项目依赖 IDE(如 IntelliJ),需同步刷新 Maven 项目,确保 IDE 使用更新后的编译配置。
综上,Maven 源码排除的本质不是“删除路径”,而是“限定范围”。通过 maven-compiler-plugin 的










