Skip to content

maven plugin: IllegalArgumentException while collecting optional dependency #756

@stevenschlansker

Description

@stevenschlansker

When using native-maven-plugin 0.11.0, we declare a dependency:

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
            <optional>true</optional>
        </dependency>

We use our test jar in a few places and don't want to bring the launcher in, so we made the dependency optional. This causes an IllegalArgumentException from the maven plugin:

aused by: java.lang.IllegalArgumentException: version can neither be null, empty nor blank
    at org.apache.maven.artifact.ArtifactUtils.notBlank (ArtifactUtils.java:95)
    at org.apache.maven.artifact.ArtifactUtils.key (ArtifactUtils.java:86)
    at org.apache.maven.ReactorReader.findArtifact (ReactorReader.java:96)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:350)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:261)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:243)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:243)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:183)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.resolveCachedArtifactDescriptor (DfDependencyCollector.java:382)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.getArtifactDescriptorResult (DfDependencyCollector.java:368)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:218)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:156)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process (DfDependencyCollector.java:138)
    at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doCollectDependencies (DfDependencyCollector.java:108)
    at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies (DependencyCollectorDelegate.java:222)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies (DefaultDependencyCollector.java:87)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies (DefaultRepositorySystem.java:328)
    at org.graalvm.buildtools.maven.NativeTestMojo.resolveDependencies (NativeTestMojo.java:301)
    at org.graalvm.buildtools.maven.NativeTestMojo.findJunitPlatformNativeJars (NativeTestMojo.java:309)
    at org.graalvm.buildtools.maven.NativeTestMojo.addInferredDependenciesToClasspath (NativeTestMojo.java:139)
    at org.graalvm.buildtools.maven.AbstractNativeImageMojo.populateClasspath (AbstractNativeImageMojo.java:432)
    at org.graalvm.buildtools.maven.AbstractNativeImageMojo.getClasspath (AbstractNativeImageMojo.java:438)
    at org.graalvm.buildtools.maven.AbstractNativeImageMojo.getBuildArgs (AbstractNativeImageMojo.java:204)
    at org.graalvm.buildtools.maven.AbstractNativeImageMojo.buildImage (AbstractNativeImageMojo.java:455)
    at org.graalvm.buildtools.maven.NativeTestMojo.execute (NativeTestMojo.java:180)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)

In the debugger, when NativeTestMojo.findJunitPlatformNativeJars calls NativeTestMojo.resolveDependencies, you can see the CollectRequests passed in:

null -> [org.graalvm.buildtools:junit-platform-native:jar:0.11.0 (runtime), org.junit.platform:junit-platform-launcher:: (runtime), ...

The junit-platform-launcher dependency is missing its version in the built collect requests. (The version is managed in dependencyManagement through a bom)

Expected behavior
The native test maven plugin should handle optional dependencies here, since it is present at test time.

System Info (please complete the following information):

  • OS: Fedora Linux 42
  • GraalVM Version 21 CE
  • Java Version 21
  • Plugin version 0.11.0

Workaround: remove dependency declaration <optional>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions