-
Notifications
You must be signed in to change notification settings - Fork 83
Description
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>