From e97e691787b403d6a20ac6ef299cfecdb1dcf3c4 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 31 Mar 2026 12:12:37 +0200 Subject: [PATCH] Fix NPE in EnhancedPluginDescriptorBuilder with Maven 4 Maven 4 refactored PluginDescriptorBuilder.build(Reader, String) to no longer call buildConfiguration(), which EnhancedPluginDescriptorBuilder overrides to capture the raw PlexusConfiguration. This caused a NPE when accessing configuration.getChild() since the field was never set. When running under Maven 4, the PluginDescriptorBuilder already populates requiredJavaVersion and requiredMavenVersion directly on the PluginDescriptor, so we can read them from there instead of from the raw configuration. Co-Authored-By: Claude Opus 4.6 --- .../EnhancedPluginDescriptorBuilder.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/EnhancedPluginDescriptorBuilder.java b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/EnhancedPluginDescriptorBuilder.java index 17bc30bbd..75e8ee11a 100644 --- a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/EnhancedPluginDescriptorBuilder.java +++ b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/EnhancedPluginDescriptorBuilder.java @@ -70,10 +70,18 @@ public PluginDescriptor build(Reader reader, String source) throws PlexusConfigu PluginDescriptor pluginDescriptor = super.build(reader, source); // elements added in plugin descriptor 1.1 ExtendedPluginDescriptor extendedPluginDescriptor = new ExtendedPluginDescriptor(pluginDescriptor); - extendedPluginDescriptor.setRequiredJavaVersion( - configuration.getChild("requiredJavaVersion").getValue()); - extendedPluginDescriptor.setRequiredMavenVersion( - configuration.getChild("requiredMavenVersion").getValue()); + if (configuration != null) { + // Maven 3.x path: buildConfiguration() was called by super.build(), so configuration is available + extendedPluginDescriptor.setRequiredJavaVersion( + configuration.getChild("requiredJavaVersion").getValue()); + extendedPluginDescriptor.setRequiredMavenVersion( + configuration.getChild("requiredMavenVersion").getValue()); + } else { + // Maven 4+ path: PluginDescriptorBuilder no longer calls buildConfiguration(), + // but already populates requiredJavaVersion/requiredMavenVersion on the descriptor + extendedPluginDescriptor.setRequiredJavaVersion(pluginDescriptor.getRequiredJavaVersion()); + // requiredMavenVersion is already accessible through ExtendedPluginDescriptor's delegation + } return extendedPluginDescriptor; }