[英]Error when using the maven-plugin-plugin version 3.6.0 on Java 16 code containing record types
我正在创建一个 Maven 插件使用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
</plugin>
我想将我的插件所需的 JDK 版本及其依赖项升级到 16,但似乎有问题:
Caused by: java.lang.UnsupportedOperationException: Record requires ASM8
at org.objectweb.asm.ClassVisitor.visitRecordComponent (ClassVisitor.java:305)
at org.objectweb.asm.ClassReader.readRecordComponent (ClassReader.java:930)
at org.objectweb.asm.ClassReader.accept (ClassReader.java:708)
at org.objectweb.asm.ClassReader.accept (ClassReader.java:401)
at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.analyzeClassStream (DefaultMojoAnnotationsScanner.java:208)
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:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
在org.apache.maven.plugin-tools:maven-plugin-tools-annotations:3.6.0
中,可以看到以下构造函数(在DefaultMojoAnnotationsScanner.analyzeClassStream()
中调用堆栈跟踪)
public MojoClassVisitor( Logger logger )
{
super( Opcodes.ASM7 );
this.logger = logger;
}
当 ASM 需要版本 8 来处理记录类型时,它将 ASM API 版本硬连接到 ASM7。 在这些 Maven 插件的新版本发布之前,有什么方法可以升级上述 class 的 ASM 依赖项,而无需分叉和修补所有可能的 Z9115C10980645C41313F244AC1A377F 插件? 在插件上使用通常的<excludes>
和<dependency>
标记在这里不起作用,因为即使我升级依赖项本身, MojoClassVisitor
仍然会将 API 版本硬编码为 ASM7。
这似乎是已为下一版本 3.6.1 修复的公认问题: https://issues.apache.org/jira/browse/MPLUGIN-369
一种解决方法是添加:
<repositories>
<repository>
<id>apache-snapshot-repository</id>
<name>Apache Snapshot Repository</name>
<url>https://repository.apache.org/snapshots/</url>
</repository>
</repositories>
然后将此依赖项添加到maven-plugin-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-annotations</artifactId>
<version>3.6.1-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.