1

Context : I'm developing a Maven Plugin.

I'm using MavenProject's list of dependencies, so I want to convert to an array of Strings.

import org.apache.maven.project.MavenProject;

@Parameter(...)
private MavenProject project;

// Getting Dependencies
List<Dependency> depsList = project.getDependencies();

Following solution works well :

ArrayList<String> depsArrayList = new ArrayList<String>();
for ( Dependency d : depsList){
    getLog().info(d.getArtifactId()); //OK, displays each dependency
    depsArrayList.add(d.getArtifactId());
}

I'd like to use maps instead.

List<String> depsStringList = depsList.stream()
            .map(d -> d.getArtifactId())
            .collect(Collectors.toList());

But I get following error :

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project mjext-maker-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: Index 52264 out of bounds for length 154 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project mjext-maker-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: Index 52264 out of bounds for length 154
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    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:972)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: Index 52264 out of bounds for length 154
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:148)
    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:972)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 52264 out of bounds for length 154
    at org.objectweb.asm.ClassReader.readClass (Unknown Source)
    at org.objectweb.asm.ClassReader.accept (Unknown Source)
    at org.objectweb.asm.ClassReader.accept (Unknown Source)
    at org.apache.maven.tools.plugin.annotations.scanner.DefaultMojoAnnotationsScanner.scanDirectory (DefaultMojoAnnotationsScanner.java:205)

I know what is an ArrayOutOfBound error but this one I don't know where it's coming from.

If I divise into more steps :

Stream<Dependency> depsStream = depsList.stream();
Stream<String> stringDepsStream = depsStream.map(Dependency::getArtifactId);
List<String> depsStringList =  stringDepsStream.collect(Collectors.toList());

This one line raises the issue :

Stream<String> stringDepsStream = depsStream.map(Dependency::getArtifactId);

It looks like this use case fits well to the examples in Collectors or stream doc. Is there something obvious I'm missing ?

Didier L
  • 18,905
  • 10
  • 61
  • 103
Francois
  • 143
  • 7
  • [Duplicates](https://stackoverflow.com/q/35046404/2541560) suggest a version problem, but I don't know how that would have an effect only when using streams. Try other versions of Objectweb ASM. – Kayaman Feb 25 '22 at 22:25
  • Or maybe https://stackoverflow.com/questions/54026707/arrayoutofbounds-compiling-maven-plugin-on-netbeans – Didier L Feb 26 '22 at 10:43

1 Answers1

2

You are using a too old version of maven-plugin-plugin. The stacktrace shows you are using version 3.2, which was released in 2012. It depends on plugin-tools 3.2 which depends on ASM Core 3.3.1 released in 2011.

These are older than Java 8 (2014) and cannot understand method-references and lambdas.

Upgrade your version of Maven/maven-plugin-plugin to a more recent version to make it compatible with the Java version you are using.

Didier L
  • 18,905
  • 10
  • 61
  • 103
  • That was it. Thank you very much. I was inheriting this old version from Super POM default bindings : https://maven.apache.org/ref/3.8.3/maven-core/default-bindings.html. Being new to maven ecosystem I did not knew where to look. Upgrading to latest version fixed that. `mvn help:effective-pom` can help people with similar issues to check effective dependencies. – Francois Feb 28 '22 at 09:48