You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PMDException异常排查:不支持类文件主版本65及日志获取

问题背景

目标

使用org.apache.maven.plugins的maven-pmd-plugin 3.21.2对项目执行PMD扫描。

已尝试操作

采用如下pom配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>3.21.2</version>
    <configuration>
        <outputDirectory>target/reports/pmd</outputDirectory>
    </configuration>
</plugin>

执行命令:mvn clean install pmd:cpd pmd:pmd

问题

问题100%复现,出现PMD处理错误,调试发现抛出PMDException,根因为java.lang.IllegalArgumentException: Unsupported class file major version 65,完整堆栈信息如下:

net.sourceforge.pmd.PMDException: Error while processing
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:128)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:100)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:62)
    at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:89)
    at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:30)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65
    at org.objectweb.asm.ClassReader.(ClassReader.java:199)
    at org.objectweb.asm.ClassReader.(ClassReader.java:180)
    at org.objectweb.asm.ClassReader.(ClassReader.java:166)
    at org.objectweb.asm.ClassReader.(ClassReader.java:287)
    at net.sourceforge.pmd.lang.java.typeresolution.PMDASMClassLoader.getImportedClasses(PMDASMClassLoader.java:118)
    at net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver.populateClassName(ClassTypeResolver.java:1643)
    at net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver.visit(ClassTypeResolver.java:216)
    at net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit.jjtAccept(ASTCompilationUnit.java:44)
    at net.sourceforge.pmd.lang.java.typeresolution.TypeResolutionFacade.initializeWith(TypeResolutionFacade.java:21)
    at net.sourceforge.pmd.lang.java.AbstractJavaHandler$5.start(AbstractJavaHandler.java:121)
    at net.sourceforge.pmd.SourceCodeProcessor.usesTypeResolution(SourceCodeProcessor.java:178)
    at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:205)
    at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:118)
    ... 10 more

咨询

该PMDException的成因是什么?如何获取更多日志进行排查?


解答

成因分析

  1. Java版本不兼容:Class文件主版本号65对应Java 21,你使用的maven-pmd-plugin 3.21.2依赖的ASM版本不支持Java 21的Class文件格式。PMD做类型解析时需要ASM读取Class文件,旧版ASM无法识别高版本Java编译出的字节码,因此抛出Unsupported class file major version异常。
  2. 插件版本滞后:maven-pmd-plugin 3.21.2发布时Java 21尚未正式推出,该版本插件默认依赖的ASM版本适配范围未覆盖Java 21。

排查与解决建议

1. 获取更多日志的方法

  • 执行Maven命令时添加-X参数开启调试日志,会输出PMD扫描过程中的详细信息,包括加载的Class文件路径、ASM版本、扫描的源代码文件等:
    mvn clean install pmd:cpd pmd:pmd -X
    
  • 在插件配置中增加日志级别设置,在<configuration>标签内添加:
    <verbose>true</verbose>
    <logLevel>DEBUG</logLevel>
    
    重新执行命令后,会输出更详细的PMD内部处理日志,便于定位具体触发异常的Class文件。

2. 解决异常的方案

  • 升级maven-pmd-plugin版本:更新到支持Java 21的版本(如3.22.0及以上),新版本插件会依赖适配Java 21的ASM版本。修改pom.xml中的插件版本:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.22.0</version> <!-- 或更高版本 -->
        <configuration>
            <outputDirectory>target/reports/pmd</outputDirectory>
        </configuration>
    </plugin>
    
  • 降级Java编译版本:如果暂时无法升级插件,可将项目的Java编译版本降到插件支持的最高版本(如Java 17,对应主版本号61),修改pom.xml中的maven-compiler-plugin配置:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
            <source>17</source>
            <target>17</target>
        </configuration>
    </plugin>
    

内容的提问来源于stack exchange,提问作者PatPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:12:38