Java 17开发Maven插件遇Unsupported class file版本异常求助
问题
用Java 17开发Maven插件,通过以下命令创建了模块:
mvn archetype:generate -DgroupId=com.github.siom79.jasyncapicmp -DartifactId=jasyncapicmp-maven-plugin -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin
已经把Maven更新到3.9.2,还引入了一个基于Java 17构建的依赖库。执行mvn clean install -X时抛出异常:
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 61 at org.objectweb.asm.ClassReader.<init> (ClassReader.java:184) at org.objectweb.asm.ClassReader.<init> (ClassReader.java:166) at org.objectweb.asm.ClassReader.<init> (ClassReader.java:152) at org.objectweb.asm.ClassReader.<init> (ClassReader.java:273) at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.analyzeClassStream (DefaultMojoAnnotationsScanner.java:207) at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scanArchive (DefaultMojoAnnotationsScanner.java:142) at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scan (DefaultMojoAnnotationsScanner.java:111) at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scan (DefaultMojoAnnotationsScanner.java:78) at org.apache.maven.tools.plugin.extractor.annotations.JavaAnnotationsMojoDescriptorExtractor.scanAnnotations (JavaAnnotationsMojoDescriptorExtractor.java:124) at org.apache.maven.tools.plugin.extractor.annotations.JavaAnnotationsMojoDescriptorExtractor.execute (JavaAnnotationsMojoDescriptorExtractor.java:103) at org.apache.maven.tools.plugin.scanner.DefaultMojoScanner.populatePluginDescriptor (DefaultMojoScanner.java:96) at org.apache.maven.plugin.plugin.AbstractGeneratorMojo.execute (AbstractGeneratorMojo.java:260) at org.apache.maven.plugin.plugin.HelpGeneratorMojo.execute (HelpGeneratorMojo.java:92) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126) [...]
推测是ASM的ClassReader无法解析Java 17编译的类文件,但通过dependencyManagement强制升级ASM版本未成功,求解决办法。
解决方案
问题核心是maven-plugin-plugin(负责扫描Mojo注解的核心插件)自带的ASM版本过低,不支持Java 17的类文件(major version 61)。仅靠dependencyManagement无法覆盖插件内部依赖,需要直接在maven-plugin-plugin的配置中调整:
方法1:升级maven-plugin-plugin到兼容版本
将maven-plugin-plugin升级到3.8.1及以上(该版本开始支持Java 17),在项目pom.xml中添加如下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.8.1</version> <configuration> <!-- 可选:明确指定Java版本,避免插件使用错误的JDK环境 --> <javaVersion>17</javaVersion> </configuration> </plugin> </plugins> </build>
方法2:给maven-plugin-plugin强制指定高版本ASM
如果暂时无法升级插件,可手动为其指定支持Java 17的ASM版本(如9.4及以上):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>你当前使用的插件版本</version> <dependencies> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.4</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> <version>9.4</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-tree</artifactId> <version>9.4</version> </dependency> </dependencies> </plugin> </plugins> </build>
额外检查项
确保项目的maven-compiler-plugin正确配置Java 17:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <release>17</release> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者siom
相关产品推荐
相关产品推荐

