将 maven-plugin-plugin 从 3.6.0 升级到 3.6.4 后,在构建创建 maven-plugin-descriptor 时出现以下异常:
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.6.4:descriptor failed: syntax error @[60,84] in file:/xyz/Foo.java
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:148)
...
Caused by: com.thoughtworks.qdox.parser.ParseException: syntax error @[60,84] in file:/xyz/Foo.java
at com.thoughtworks.qdox.parser.impl.Parser.yyerror (Parser.java:1963)
at com.thoughtworks.qdox.parser.impl.Parser.yyparse (Parser.java:2085)
at com.thoughtworks.qdox.parser.impl.Parser.parse (Parser.java:1944)
at com.thoughtworks.qdox.library.SourceLibrary.parse (SourceLibrary.java:232)
这是使用 Maven 3.8.6 运行的。
代码编译文件 - 仅在运行时
org.apache.maven.plugins:maven-plugin-plugin:3.6.4:descriptor
事实证明,这与使用受限标识符(var、yield、record)作为方法参数有关。在这方面,底层的 qdox 解析器似乎比 Java 编译器更加挑剔。
对文件运行 Sonarlint 有助于识别问题。他们在
java:S6213
规则中提供了很好的描述。