繁体   English   中英

在包含记录类型的 Java 16 代码上使用 maven-plugin-plugin 版本 3.6.0 时出错

[英]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。

我还创建了https://issues.apache.org/jira/browse/MPLUGIN-371来跟踪这个

这似乎是已为下一版本 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM