如何将源码根目录下的文件排除在Maven Checkstyle插件检查外?
嘿,我来帮你搞定这个困扰!你遇到的问题大概率是因为Maven Checkstyle插件对非Java文件的处理逻辑和普通类文件不一样——虽然你参考了排除类的配置,但针对根目录的LICENSE.txt、NOTICE.txt这类非源码文件,常规的<excludes>可能因为路径匹配或插件的文件扫描规则没生效,尤其是在Apache Commons FileUpload这种有统一代码规范的项目里。
给你两个针对性的解决方案,你可以试试:
方案一:精准调整<excludes>路径匹配
首先确认你的LICENSE/NOTICE文件位置:如果它们在项目根目录,试试把配置改成这样,同时明确限定需要检查的文件类型,避免插件扫描到所有文本文件:
<configuration> <!-- 先指定要检查的文件类型,缩小扫描范围 --> <includes>**/*.java,**/*.properties,**/*.xml</includes> <!-- 排除根目录的目标文件 --> <excludes>LICENSE.txt,NOTICE.txt</excludes> </configuration>
如果文件是放在src/main/resources下,就把排除路径改成src/main/resources/LICENSE.txt,src/main/resources/NOTICE.txt。
方案二:在Checkstyle规则文件中直接过滤文件
如果方案一还是没效果,那可能是项目的Checkstyle规则里针对所有文本文件都开启了许可证头检查,这时候直接在Checkstyle的规则配置文件(比如checkstyle.xml)里添加前置过滤:
<module name="Checker"> <!-- 执行检查前就过滤掉指定文件 --> <module name="BeforeExecutionExclusionFileFilter"> <property name="fileNamePattern" value="LICENSE.txt|NOTICE.txt"/> </module> <!-- 下面是原有的其他规则模块 --> </module>
这个配置会让Checkstyle在开始检查前就跳过这两个文件,从根源上避免触发许可证头警告。
另外提一句:Apache Commons系列项目大多继承了 Commons Parent POM,里面有统一的Checkstyle配置,你可以看看项目里的父POM或者已有的checkstyle.xml,说不定能找到更贴合项目规范的排除方式~
内容的提问来源于stack exchange,提问作者Kalle Richter

