如何配置Maven检测Java类包声明与源文件存放路径不匹配的问题
Maven 编译阶段校验Java源文件路径与package声明不匹配的配置方案
Java编译器默认不会校验源文件存放路径与代码中package声明的一致性,只要源码语法合法就会正常编译,生成的class文件也会自动放到与package匹配的目录下,因此默认Maven构建不会触发报错。可以通过以下两种配置实现对应校验:
方案一:通过maven-compiler-plugin内置参数校验
直接开启javac编译器的路径校验规则即可,无需引入额外依赖:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <compilerArgs> <!-- 开启package与路径不匹配的校验警告 --> <arg>-Xlint:path</arg> <!-- 仅将路径不匹配的警告升级为错误,不影响其他警告 --> <arg>-Xlint:path=error</arg> <!-- 如果需要所有编译警告都转为错误,替换上方参数为<arg>-Werror</arg>即可 --> </compilerArgs> </configuration> </plugin> </plugins> </build>
配置后只要出现源文件路径与package声明不匹配的情况,编译阶段会直接抛出错误终止构建。
方案二:通过maven-enforcer-plugin做严格校验
如果需要在更早的构建阶段(validate阶段,早于compile)就发现问题,或者需要更全面的源码目录规范校验,可以使用maven-enforcer-plugin搭配扩展规则实现:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.4.1</version> <dependencies> <!-- 引入扩展规则包 --> <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>extra-enforcer-rules</artifactId> <version>1.7.0</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <!-- 校验Java源码目录布局与package声明一致性 --> <requireJavaSourceFolderLayout> <validatePackageNames>true</validatePackageNames> <!-- 可额外配置<allowDefaultPackage>false</allowDefaultPackage>禁止使用默认包 --> </requireJavaSourceFolderLayout> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build>
该方案除了校验路径与package的匹配性外,还支持包名合法性校验、默认包禁用等扩展规则,适合对代码规范要求较高的项目。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

