构建运行XML报错:根元素后文档标记必须格式良好
XML解析错误排查结果
报错核心原因是Checkstyle配置文件的XML标签嵌套、闭合逻辑完全混乱,并非你怀疑的<module name="IllegalImport"/>单行问题,具体错误点如下:
- 根节点
<module name="Checker">自始至终没有添加对应的闭合标签,解析器读到文件末尾都没找到根节点结束标记 <module name="TreeWalker">被提前闭合:写完命名规范相关检查项后就加了</module>,导致后续所有本应属于TreeWalker子节点的代码检查规则,全部被甩到了TreeWalker节点外部,甚至部分节点散落在根节点层级外,直接触发「根元素后内容格式不合法」的报错- 多个模块标签错误自闭合,子属性被写到标签外部:
<module name="AvoidStarImport"/>直接写了自闭合标记,后面配置excludes规则的<property>标签被甩到模块外部,还额外多了一个无匹配的</module>闭合标签<module name="UnusedImports"/>同样提前自闭合,配置processJavadoc的<property>标签被甩到模块外部,也多了一个无匹配的</module>闭合标签
- 配置文件末尾在
<module name="MissingOverride"/>后多了一个无对应开标签的</module>,进一步打乱标签层级
修复后可正常运行的完整配置
<module name="Checker"> <module name="LineLength"> <property name="max" value="150"/> </module> <module name="BeforeExecutionExclusionFileFilter"> <property name="fileNamePattern" value="module\-info\.java$"/> </module> <property name="fileExtensions" value="java, properties, xml"/> <!-- General file conventions --> <module name="NewlineAtEndOfFile"> <property name="lineSeparator" value="lf_cr_crlf" /> </module> <module name="FileTabCharacter"/> <module name="RegexpSingleline"> <property name="format" value="\s+$"/> <property name="minimum" value="0"/> <property name="maximum" value="0"/> <property name="message" value="Line has trailing spaces."/> </module> <module name="TreeWalker"> <!-- Naming conventions --> <module name="ConstantName"/> <module name="LocalFinalVariableName"/> <module name="LocalVariableName"/> <module name="MemberName"/> <module name="MethodName"/> <module name="PackageName"/> <module name="ParameterName"/> <module name="StaticVariableName"/> <module name="TypeName"/> <!-- Checks for imports --> <module name="AvoidStarImport"> <property name="excludes" value="java.io,java.net,java.lang.Math"/> </module> <module name="IllegalImport"/> <module name="RedundantImport"/> <module name="UnusedImports"> <property name="processJavadoc" value="false"/> </module> <!-- Checks for Size Violations --> <module name="MethodLength"/> <module name="ParameterNumber"/> <!-- Checks for whitespace --> <module name="EmptyForIteratorPad"/> <module name="GenericWhitespace"/> <module name="MethodParamPad"/> <module name="NoWhitespaceAfter"/> <module name="NoWhitespaceBefore"/> <module name="OperatorWrap"/> <module name="SeparatorWrap"> <property name="tokens" value="COMMA,LPAREN,RPAREN,RBRACK,ARRAY_DECLARATOR"/> <property name="option" value="eol"/> </module> <module name="SeparatorWrap"> <property name="tokens" value="DOT,METHOD_REF,ELLIPSIS,AT"/> <property name="option" value="nl"/> </module> <module name="ParenPad"/> <module name="TypecastParenPad"/> <module name="WhitespaceAfter"/> <module name="WhitespaceAround"/> <module name="SingleSpaceSeparator"/> <!-- Modifier Checks --> <module name="ModifierOrder"/> <module name="RedundantModifier"/> <!-- Checks for blocks. You know, those {}'s --> <module name="AvoidNestedBlocks"/> <module name="EmptyBlock"/> <module name="LeftCurly"/> <module name="NeedBraces"/> <module name="RightCurly"/> <!-- Checks for common coding problems --> <module name="EmptyStatement"/> <module name="EqualsHashCode"/> <module name="IllegalInstantiation"/> <module name="InnerAssignment"/> <module name="MultipleVariableDeclarations"/> <module name="SimplifyBooleanExpression"/> <module name="SimplifyBooleanReturn"/> <!-- Checks for class design --> <module name="DesignForExtension"/> <module name="FinalClass"/> <module name="HideUtilityClassConstructor"/> <module name="InterfaceIsType"/> <module name="VisibilityModifier"/> <!-- Miscellaneous other checks --> <module name="ArrayTypeStyle"/> <module name="UpperEll"/> <module name="Indentation"> <property name="caseIndent" value="0"/> <property name="lineWrappingIndentation" value="8"/> </module> <!-- Checks for annotations --> <module name="MissingOverride"/> </module> </module>
校验说明
- 修复逻辑核心是把所有代码语法类检查规则统一放到TreeWalker模块内部,每个模块的属性配置全部包裹在对应module的开、闭标签内,删除多余的无匹配闭合标签,补全最外层Checker节点的闭合标记
- 替换配置后可先通过IDE的XML语法校验功能确认无标签层级错误,再重新执行构建任务即可解决该解析报错
内容的提问来源于stack exchange,提问作者fawn
相关产品推荐
相关产品推荐

