自定义maven插件失败:java.lang.ArrayIndexOutOfBoundsException:3379 at org.objectweb.asm.ClassReader.<init>(未知来源)

Eri*_* Lu 8 java maven-plugin

我用java-annotations编写了一个自定义maven插件,当jdk8和maven 3.5.0运行"mvn clean install"时,得到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.5:descriptor (default-descriptor) on project pg-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.5:descriptor failed: 3379 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.5:descriptor (default-descriptor) on project pg-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.5:descriptor failed: 3379
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        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:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.5:descriptor failed: 3379
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 20 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 3379
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.analyzeClassStream(DefaultMojoAnnotationsScanner.java:214)
        at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scanArchive(DefaultMojoAnnotationsScanner.java:145)
        at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scan(DefaultMojoAnnotationsScanner.java:112)
        at org.apache.maven.tools.plugin.extractor.annotations.scanner.DefaultMojoAnnotationsScanner.scan(DefaultMojoAnnotationsScanner.java:79)
        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:283)
        at org.apache.maven.plugin.plugin.DescriptorGeneratorMojo.execute(DescriptorGeneratorMojo.java:90)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        ... 21 more
[ERROR]
Run Code Online (Sandbox Code Playgroud)

关注代码是pom:http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 net.engining.pg pg-parent 3.0.0-SNAPSHOT ..

    <name>PowerGear - ????Maven??</name>
    <artifactId>pg-maven-plugin</artifactId>
    <packaging>maven-plugin</packaging>

    <properties>
        <maven-core.version>3.5.0</maven-core.version>
        <plexus-build-api.version>0.0.7</plexus-build-api.version>
        <maven-plugin-annotations.version>3.5</maven-plugin-annotations.version>
        <maven-plugin-plugin.version>3.5</maven-plugin-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.engining.pg</groupId>
            <artifactId>pg-support</artifactId>
        </dependency>
        <dependency>
            <groupId>net.engining.pg</groupId>
            <artifactId>pg-gwt</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>${maven-core.version}</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
        </dependency>
        <dependency>
            <groupId>org.sonatype.plexus</groupId>
            <artifactId>plexus-build-api</artifactId>
            <version>${plexus-build-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>${maven-plugin-annotations.version}</version>
        </dependency>
        <dependency>
            <!-- ????Java?????? -->
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibator</artifactId>
        </dependency>

    </dependencies>
    <description>??????PowerGear??????????????????????API??ibator????????License??Apache License V2?? http://http://ibatis.apache.org/docs/tools/ibator/license.html </description>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>${maven-plugin-plugin.version}</version>
                <executions>
                    <execution>
                        <id>default-descriptor</id>
                        <phase>process-classes</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings 
                    only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-plugin-plugin
                                        </artifactId>
                                        <versionRange>
                                            [3.3,)
                                        </versionRange>
                                        <goals>
                                            <goal>descriptor</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <profiles>
        <profile>
            <id>obfuscated</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.wvengen</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <version>2.0.8</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>proguard</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <proguardVersion>5.2.1</proguardVersion>
                            <obfuscate>true</obfuscate>
                            <addMavenDescriptor>true</addMavenDescriptor>
                            <options>
                                <option>-dontshrink</option>
                                <option>-dontoptimize</option>
                                <option>-keepattributes *Annotation*</option>
                                <option>-keepattributes Signature</option>
                                <option>-repackageclasses ''</option>
                                <option>-allowaccessmodification</option>
                                <option>-keepclasseswithmembers class * extends
                                    org.apache.maven.plugin.AbstractMojo { * ;}</option>
                                <option>-keepclasseswithmembers class
                                    net.engining.pg.maven.plugin.ui.Generation { * ;}</option>
                            </options>
                            <libs>
                                <lib>${java.home}/lib/rt.jar</lib>
                            </libs>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>net.sf.proguard</groupId>
                                <artifactId>proguard-base</artifactId>
                                <version>5.2.1</version>
                                <scope>runtime</scope>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
Run Code Online (Sandbox Code Playgroud)

小智 10

当Maven扫描您的类路径以获取Mojo注释时,会发生此错误.您需要告诉插件在何处查找注释,以便它不会扫描整个类路径.在这里,我限制扫描到当前项目:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>c.c.h</groupId>
  <artifactId>plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>1.0-SNAPSHOT</version>
  <url>http://maven.apache.org</url>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.4</version>
        <configuration>
          <mojoDependencies>
            <param>c.c.h:plugin</param>
          </mojoDependencies>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    ...
  </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

  • mojoDependencies的东西对我不起作用.但是从3.2升级到3.4确实有效. (4认同)

sir*_*009 5

我只是遇到了同样的问题,但是错误的依赖关系是我自己的项目之一(我确实需要)。查看堆栈跟踪和源代码似乎是在扫描类以查找注释时发生的,但是错误并不是特别有用。

我将我的maven-plugin-plugin从3.2更新到3.5.1,问题消失了。这是我的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-plugin-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <goalPrefix>distribute</goalPrefix>
        <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
    </configuration>
    <executions>
        <execution>
            <id>mojo-descriptor</id>
            <goals>
                <goal>descriptor</goal>
            </goals>
        </execution>
        <execution>
            <id>help-goal</id>
            <goals>
                <goal>helpmojo</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)


Tim*_*aer 5

@end-user 的回答让我找到了正确的方向。我可以通过手动升级 maven-plugin-plugin 的版本来解决这个问题。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-plugin-plugin</artifactId>
      <version>3.5.2</version>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)


小智 1

我遇到过同样的问题。当我删除其中一个依赖项时,它就消失了,就我而言,它是

    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit</artifactId>
      <version>4.8.0.201706111038-r</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

看起来 maven-plugin 与某些其他依赖项结合起来表现不佳。