From 6886a597388845d56f798c344c14a1fef27f500d Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 31 Mar 2026 13:29:17 +0200 Subject: [PATCH] fix: restore buildConfiguration() callback in deprecated build() methods The MNG-7947 refactoring changed the deprecated build(Reader, String) and build(InputStream, String) methods to delegate to the new build(ReaderSupplier/StreamSupplier, String) methods, which bypassed the overridable buildConfiguration() method. This broke subclasses (such as EnhancedPluginDescriptorBuilder in maven-plugin-tools) that override buildConfiguration() to intercept the parsed configuration. Restore the buildConfiguration() callback in the legacy code path while still supporting PLUGIN 2.0.0 namespace detection. Co-Authored-By: Claude Opus 4.6 --- .../descriptor/PluginDescriptorBuilder.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java b/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java index b6edfc04c189..086a49daafeb 100644 --- a/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java +++ b/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java @@ -71,7 +71,24 @@ public PluginDescriptor build(Reader reader) throws PlexusConfigurationException */ @Deprecated public PluginDescriptor build(Reader reader, String source) throws PlexusConfigurationException { - return build(() -> reader, source); + try { + BufferedReader br = new BufferedReader(reader, BUFFER_SIZE); + br.mark(BUFFER_SIZE); + XMLStreamReader xsr = XMLInputFactory.newFactory().createXMLStreamReader(br); + xsr.nextTag(); + String nsUri = xsr.getNamespaceURI(); + br.reset(); + if (PLUGIN_2_0_0.equals(nsUri)) { + xsr = XMLInputFactory.newFactory().createXMLStreamReader(br); + return new PluginDescriptor(new PluginDescriptorStaxReader().read(xsr, true)); + } else { + // Call buildConfiguration() for backward compatibility with subclasses that override it + PlexusConfiguration cfg = buildConfiguration(br); + return build(source, cfg); + } + } catch (XMLStreamException | IOException e) { + throw new PlexusConfigurationException(e.getMessage(), e); + } } public PluginDescriptor build(ReaderSupplier readerSupplier) throws PlexusConfigurationException { @@ -98,7 +115,24 @@ public PluginDescriptor build(ReaderSupplier readerSupplier, String source) thro */ @Deprecated public PluginDescriptor build(InputStream input, String source) throws PlexusConfigurationException { - return build(() -> input, source); + try { + BufferedInputStream bis = new BufferedInputStream(input, BUFFER_SIZE); + bis.mark(BUFFER_SIZE); + XMLStreamReader xsr = XMLInputFactory.newFactory().createXMLStreamReader(bis); + xsr.nextTag(); + String nsUri = xsr.getNamespaceURI(); + bis.reset(); + if (PLUGIN_2_0_0.equals(nsUri)) { + xsr = XMLInputFactory.newFactory().createXMLStreamReader(bis); + return new PluginDescriptor(new PluginDescriptorStaxReader().read(xsr, true)); + } else { + // Call buildConfiguration() for backward compatibility with subclasses that override it + PlexusConfiguration cfg = buildConfiguration(bis); + return build(source, cfg); + } + } catch (XMLStreamException | IOException e) { + throw new PlexusConfigurationException(e.getMessage(), e); + } } public PluginDescriptor build(StreamSupplier inputSupplier) throws PlexusConfigurationException {