This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new bcf5c0c4e0 [MNG-8527] Re-enable consumer POM, remove unwanted managed 
dependencies, developers, contributors, mailing lists and issue management 
(#2058)
bcf5c0c4e0 is described below

commit bcf5c0c4e0b6d6c53c6a07d3bf10794b0e6083a1
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Tue Jan 28 12:39:03 2025 +0100

    [MNG-8527] Re-enable consumer POM, remove unwanted managed dependencies, 
developers, contributors, mailing lists and issue management (#2058)
    
    * re-enable consumer POM for 4.0.0 and 4.1.0 models
    * remove unwanted managed dependencies
    * remove plugin repositories, developers, contributors, mailing lists and 
issue management
---
 .../DefaultConsumerPomArtifactTransformer.java     |   4 +-
 .../impl/DefaultConsumerPomBuilder.java            | 117 ++++++++++++++++++---
 .../transformation/AbstractRepositoryTestCase.java |  24 +++--
 .../impl/ConsumerPomBuilderTest.java               |  36 +++++++
 .../maven/it/MavenITmng8527ConsumerPomTest.java    |  94 +++++++++++++++++
 .../resources/mng-8527-consumer-pom/.mvn/.gitkeep  |   0
 .../resources/mng-8527-consumer-pom/child/pom.xml  |  44 ++++++++
 .../child/src/main/java/Test.java                  |  19 ++++
 .../test/resources/mng-8527-consumer-pom/pom.xml   |  72 +++++++++++++
 9 files changed, 383 insertions(+), 27 deletions(-)

diff --git 
a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java
 
b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java
index 60ab919f5a..7a1d32e077 100644
--- 
a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java
+++ 
b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java
@@ -36,7 +36,6 @@
 
 import org.apache.maven.api.feature.Features;
 import org.apache.maven.api.model.Model;
-import org.apache.maven.api.services.ModelBuilder;
 import org.apache.maven.api.services.ModelBuilderException;
 import org.apache.maven.internal.transformation.ConsumerPomArtifactTransformer;
 import org.apache.maven.model.v4.MavenStaxWriter;
@@ -77,8 +76,7 @@ public void 
injectTransformedArtifacts(RepositorySystemSession session, MavenPro
             // If there is no build POM there is no reason to inject artifacts 
for the consumer POM.
             return;
         }
-        boolean isModel40 = 
ModelBuilder.MODEL_VERSION_4_0_0.equals(project.getModelVersion());
-        if (Features.consumerPom(session.getUserProperties(), !isModel40)) {
+        if (Features.consumerPom(session.getUserProperties(), true)) {
             Path buildDir =
                     project.getBuild() != null ? 
Paths.get(project.getBuild().getDirectory()) : null;
             if (buildDir != null) {
diff --git 
a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java
 
b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java
index ceec7f761b..ef3689cc69 100644
--- 
a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java
+++ 
b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java
@@ -23,9 +23,15 @@
 
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.Node;
+import org.apache.maven.api.PathScope;
 import org.apache.maven.api.SessionData;
 import org.apache.maven.api.model.Dependency;
 import org.apache.maven.api.model.DependencyManagement;
@@ -77,20 +83,100 @@ public Model build(RepositorySystemSession session, 
MavenProject project, Path s
 
     protected Model buildPom(RepositorySystemSession session, MavenProject 
project, Path src)
             throws ModelBuilderException {
-        ModelBuilderResult result = buildModel(session, project, src);
+        ModelBuilderResult result = buildModel(session, src);
         Model model = result.getRawModel();
         return transform(model, project);
     }
 
     protected Model buildNonPom(RepositorySystemSession session, MavenProject 
project, Path src)
             throws ModelBuilderException {
-        ModelBuilderResult result = buildModel(session, project, src);
-        Model model = result.getEffectiveModel();
+        Model model = buildEffectiveModel(session, src);
         return transform(model, project);
     }
 
-    private ModelBuilderResult buildModel(RepositorySystemSession session, 
MavenProject project, Path src)
-            throws ModelBuilderException {
+    private Model buildEffectiveModel(RepositorySystemSession session, Path 
src) throws ModelBuilderException {
+        InternalSession iSession = InternalSession.from(session);
+        ModelBuilderResult result = buildModel(session, src);
+        Model model = result.getEffectiveModel();
+
+        if (model.getDependencyManagement() != null
+                && 
!model.getDependencyManagement().getDependencies().isEmpty()) {
+            ArtifactCoordinates artifact = iSession.createArtifactCoordinates(
+                    model.getGroupId(), model.getArtifactId(), 
model.getVersion(), null);
+            Node node = iSession.collectDependencies(
+                    iSession.createDependencyCoordinates(artifact), 
PathScope.TEST_RUNTIME);
+
+            Map<String, Node> nodes = node.stream()
+                    .collect(Collectors.toMap(n -> 
getDependencyKey(n.getDependency()), Function.identity()));
+            Map<String, Dependency> directDependencies = 
model.getDependencies().stream()
+                    .filter(dependency -> 
!"import".equals(dependency.getScope()))
+                    .collect(Collectors.toMap(
+                            DefaultConsumerPomBuilder::getDependencyKey,
+                            Function.identity(),
+                            this::merge,
+                            LinkedHashMap::new));
+            Map<String, Dependency> managedDependencies = 
model.getDependencyManagement().getDependencies().stream()
+                    .filter(dependency ->
+                            nodes.containsKey(getDependencyKey(dependency)) && 
!"import".equals(dependency.getScope()))
+                    .collect(Collectors.toMap(
+                            DefaultConsumerPomBuilder::getDependencyKey,
+                            Function.identity(),
+                            this::merge,
+                            LinkedHashMap::new));
+
+            // for each managed dep in the model:
+            // * if there is no corresponding node in the tree, discard the 
managed dep
+            // * if there's a direct dependency, apply the managed dependency 
to it and discard the managed dep
+            // * else keep the managed dep
+            managedDependencies.keySet().retainAll(nodes.keySet());
+
+            directDependencies.replaceAll((key, dependency) -> {
+                var managedDependency = managedDependencies.get(key);
+                if (managedDependency != null) {
+                    if (dependency.getVersion() == null && 
managedDependency.getVersion() != null) {
+                        dependency = 
dependency.withVersion(managedDependency.getVersion());
+                    }
+                    if (dependency.getScope() == null && 
managedDependency.getScope() != null) {
+                        dependency = 
dependency.withScope(managedDependency.getScope());
+                    }
+                    if (dependency.getOptional() == null && 
managedDependency.getOptional() != null) {
+                        dependency = 
dependency.withOptional(managedDependency.getOptional());
+                    }
+                    if (dependency.getExclusions().isEmpty()
+                            && !managedDependency.getExclusions().isEmpty()) {
+                        dependency = 
dependency.withExclusions(managedDependency.getExclusions());
+                    }
+                }
+                return dependency;
+            });
+            
managedDependencies.keySet().removeAll(directDependencies.keySet());
+
+            model = model.withDependencyManagement(
+                            managedDependencies.isEmpty()
+                                    ? null
+                                    : 
model.getDependencyManagement().withDependencies(managedDependencies.values()))
+                    .withDependencies(directDependencies.isEmpty() ? null : 
directDependencies.values());
+        }
+
+        return model;
+    }
+
+    private Dependency merge(Dependency dep1, Dependency dep2) {
+        throw new IllegalArgumentException("Duplicate dependency: " + dep1);
+    }
+
+    private static String getDependencyKey(org.apache.maven.api.Dependency 
dependency) {
+        return dependency.getGroupId() + ":" + dependency.getArtifactId() + 
":" + dependency.getType() + ":"
+                + dependency.getClassifier();
+    }
+
+    private static String getDependencyKey(Dependency dependency) {
+        return dependency.getGroupId() + ":" + dependency.getArtifactId() + ":"
+                + (dependency.getType() != null ? dependency.getType() : "") + 
":"
+                + (dependency.getClassifier() != null ? 
dependency.getClassifier() : "");
+    }
+
+    private ModelBuilderResult buildModel(RepositorySystemSession session, 
Path src) throws ModelBuilderException {
         InternalSession iSession = InternalSession.from(session);
         ModelBuilderRequest.ModelBuilderRequestBuilder request = 
ModelBuilderRequest.builder();
         request.requestType(ModelBuilderRequest.RequestType.BUILD_CONSUMER);
@@ -102,7 +188,8 @@ private ModelBuilderResult 
buildModel(RepositorySystemSession session, MavenProj
         
request.lifecycleBindingsInjector(lifecycleBindingsInjector::injectLifecycleBindings);
         ModelBuilder.ModelBuilderSession mbSession =
                 
iSession.getData().get(SessionData.key(ModelBuilder.ModelBuilderSession.class));
-        return mbSession.build(request.build());
+        ModelBuilderResult result = mbSession.build(request.build());
+        return result;
     }
 
     static Model transform(Model model, MavenProject project) {
@@ -148,12 +235,16 @@ static Model transform(Model model, MavenProject project) 
{
             model = model.withModelVersion(modelVersion);
         } else {
             Model.Builder builder = prune(
-                    Model.newBuilder(model, true)
-                            .preserveModelVersion(false)
-                            .root(false)
-                            .parent(null)
-                            .build(null),
-                    model);
+                            Model.newBuilder(model, true)
+                                    .preserveModelVersion(false)
+                                    .root(false)
+                                    .parent(null)
+                                    .build(null),
+                            model)
+                    .developers(null)
+                    .contributors(null)
+                    .mailingLists(null)
+                    .issueManagement(null);
             builder.profiles(prune(model.getProfiles()));
 
             model = builder.build();
@@ -210,8 +301,8 @@ private static <T extends ModelBase.Builder> T prune(T 
builder, ModelBase model)
                     .build());
         }
         // only keep repositories other than 'central'
-        
builder.pluginRepositories(pruneRepositories(model.getPluginRepositories()));
         builder.repositories(pruneRepositories(model.getRepositories()));
+        builder.pluginRepositories(null);
         return builder;
     }
 
diff --git 
a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/AbstractRepositoryTestCase.java
 
b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/AbstractRepositoryTestCase.java
index ad4aec5741..d20e157c25 100644
--- 
a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/AbstractRepositoryTestCase.java
+++ 
b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/AbstractRepositoryTestCase.java
@@ -30,6 +30,7 @@
 import org.apache.maven.impl.DefaultRepositoryFactory;
 import org.apache.maven.impl.InternalSession;
 import org.apache.maven.impl.model.DefaultInterpolator;
+import org.apache.maven.impl.resolver.scopes.Maven4ScopeManagerConfiguration;
 import org.apache.maven.internal.impl.DefaultSession;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.testing.PlexusTest;
@@ -40,6 +41,7 @@
 import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
 import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
 import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
+import org.eclipse.aether.internal.impl.scope.ScopeManagerImpl;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.transfer.TransferListener;
@@ -67,8 +69,9 @@ protected PlexusContainer getContainer() {
         return container;
     }
 
-    public static RepositorySystemSession 
newMavenRepositorySystemSession(RepositorySystem system) {
+    public RepositorySystemSession 
newMavenRepositorySystemSession(RepositorySystem system) {
         DefaultRepositorySystemSession rsession = new 
DefaultRepositorySystemSession(h -> false);
+        rsession.setScopeManager(new 
ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE));
 
         LocalRepository localRepo = new LocalRepository("target/local-repo");
         
rsession.setLocalRepositoryManager(system.newLocalRepositoryManager(rsession, 
localRepo));
@@ -78,21 +81,20 @@ public static RepositorySystemSession 
newMavenRepositorySystemSession(Repository
 
         DefaultMavenExecutionRequest request = new 
DefaultMavenExecutionRequest();
         MavenSession mavenSession = new MavenSession(rsession, request, new 
DefaultMavenExecutionResult());
-        DefaultSession session = new DefaultSession(
-                mavenSession,
-                null,
-                null,
-                null,
-                new SimpleLookup(List.of(
-                        new DefaultRepositoryFactory(new 
DefaultRemoteRepositoryManager(
-                                new DefaultUpdatePolicyAnalyzer(), new 
DefaultChecksumPolicyProvider())),
-                        new DefaultInterpolator())),
-                null);
+        DefaultSession session =
+                new DefaultSession(mavenSession, null, null, null, new 
SimpleLookup(getSessionServices()), null);
         InternalSession.associate(rsession, session);
 
         return rsession;
     }
 
+    protected List<Object> getSessionServices() {
+        return List.of(
+                new DefaultRepositoryFactory(new 
DefaultRemoteRepositoryManager(
+                        new DefaultUpdatePolicyAnalyzer(), new 
DefaultChecksumPolicyProvider())),
+                new DefaultInterpolator());
+    }
+
     public static RemoteRepository newTestRepository() throws 
MalformedURLException {
         return new RemoteRepository.Builder(
                         "repo",
diff --git 
a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java
 
b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java
index ef8ee384ee..890aef4cc0 100644
--- 
a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java
+++ 
b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java
@@ -22,13 +22,19 @@
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Consumer;
 
+import org.apache.maven.api.DependencyCoordinates;
+import org.apache.maven.api.Node;
+import org.apache.maven.api.PathScope;
 import org.apache.maven.api.RemoteRepository;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.SessionData;
 import org.apache.maven.api.model.Model;
+import org.apache.maven.api.services.DependencyResolver;
+import org.apache.maven.api.services.DependencyResolverResult;
 import org.apache.maven.api.services.ModelBuilder;
 import org.apache.maven.api.services.ModelBuilderRequest;
 import org.apache.maven.api.services.ModelSource;
@@ -36,12 +42,18 @@
 import org.apache.maven.api.services.model.ModelResolverException;
 import org.apache.maven.di.Injector;
 import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.impl.DefaultArtifactCoordinatesFactory;
+import org.apache.maven.impl.DefaultDependencyCoordinatesFactory;
+import org.apache.maven.impl.DefaultModelVersionParser;
+import org.apache.maven.impl.DefaultVersionParser;
 import org.apache.maven.impl.InternalSession;
+import org.apache.maven.impl.resolver.MavenVersionScheme;
 import org.apache.maven.internal.impl.InternalMavenSession;
 import org.apache.maven.internal.transformation.AbstractRepositoryTestCase;
 import org.apache.maven.project.MavenProject;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -63,6 +75,30 @@ void setupTransformerContext() throws Exception {
         iSession.getData().set(SessionData.key(ModelResolver.class), new 
MyModelResolver());
     }
 
+    @Override
+    protected List<Object> getSessionServices() {
+        List<Object> services = new ArrayList<>(super.getSessionServices());
+
+        DependencyResolver dependencyResolver = 
Mockito.mock(DependencyResolver.class);
+        DependencyResolverResult resolverResult = 
Mockito.mock(DependencyResolverResult.class);
+        Mockito.when(dependencyResolver.collect(
+                        Mockito.any(Session.class),
+                        Mockito.any(DependencyCoordinates.class),
+                        Mockito.any(PathScope.class)))
+                .thenReturn(resolverResult);
+        Node node = Mockito.mock(Node.class);
+        Mockito.when(resolverResult.getRoot()).thenReturn(node);
+        Node child = Mockito.mock(Node.class);
+        Mockito.when(node.getChildren()).thenReturn(List.of(child));
+
+        services.addAll(List.of(
+                new DefaultArtifactCoordinatesFactory(),
+                new DefaultDependencyCoordinatesFactory(),
+                new DefaultVersionParser(new DefaultModelVersionParser(new 
MavenVersionScheme())),
+                dependencyResolver));
+        return services;
+    }
+
     @Test
     void testTrivialConsumer() throws Exception {
         InternalMavenSession.from(InternalSession.from(session))
diff --git 
a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8527ConsumerPomTest.java
 
b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8527ConsumerPomTest.java
new file mode 100644
index 0000000000..f5c87152e9
--- /dev/null
+++ 
b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8527ConsumerPomTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.it;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * This is a test set for <a 
href="https://issues.apache.org/jira/browse/MNG-8527";>MNG-8527</a>.
+ */
+class MavenITmng8527ConsumerPomTest extends AbstractMavenIntegrationTestCase {
+
+    MavenITmng8527ConsumerPomTest() {
+        super("[4.0.0-rc-3-SNAPSHOT,)");
+    }
+
+    /**
+     *  Verify project is buildable.
+     */
+    @Test
+    void testIt() throws Exception {
+        Path basedir =
+                
extractResources("/mng-8527-consumer-pom").getAbsoluteFile().toPath();
+
+        Verifier verifier = newVerifier(basedir.toString());
+        verifier.addCliArgument("install");
+        verifier.execute();
+        verifier.verifyErrorFreeLog();
+
+        Path consumerPomPath =
+                
Paths.get(verifier.getArtifactPath("org.apache.maven.its.mng-8527", "child", 
"1.0.0-SNAPSHOT", "pom"));
+        Path buildPomPath = Paths.get(
+                verifier.getArtifactPath("org.apache.maven.its.mng-8527", 
"child", "1.0.0-SNAPSHOT", "pom", "build"));
+
+        assertTrue(Files.exists(consumerPomPath), "consumer pom not found at " 
+ consumerPomPath);
+        assertTrue(Files.exists(buildPomPath), "consumer pom not found at " + 
consumerPomPath);
+
+        List<String> consumerPomLines;
+        try (Stream<String> lines = Files.lines(consumerPomPath)) {
+            consumerPomLines = lines.toList();
+        }
+        assertTrue(
+                consumerPomLines.stream().noneMatch(s -> 
s.contains("<parent>")),
+                "Consumer pom should not have any <parent> element");
+        assertTrue(
+                consumerPomLines.stream().anyMatch(s -> 
s.contains("<organization>")),
+                "Consumer pom should have an <organization> element");
+        assertEquals(
+                2,
+                consumerPomLines.stream()
+                        .filter(s -> s.contains("<dependency>"))
+                        .count(),
+                "Consumer pom should have two dependencies");
+
+        List<String> buildPomLines;
+        try (Stream<String> lines = Files.lines(buildPomPath)) {
+            buildPomLines = lines.toList();
+        }
+        assertTrue(
+                buildPomLines.stream().anyMatch(s -> s.contains("<parent>")),
+                "Build pom should have a <parent> element");
+        assertTrue(
+                buildPomLines.stream().noneMatch(s -> 
s.contains("<organization>")),
+                "Build pom should not have an <organization> element");
+        assertEquals(
+                2,
+                buildPomLines.stream().filter(s -> 
s.contains("<dependency>")).count(),
+                "Build pom should have two dependencies");
+    }
+}
diff --git 
a/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/.mvn/.gitkeep 
b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/.mvn/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git 
a/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/pom.xml 
b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/pom.xml
new file mode 100644
index 0000000000..517ef640c4
--- /dev/null
+++ b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";>
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.its.mng-8527</groupId>
+    <artifactId>parent</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>child</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-api-core</artifactId>
+      <version>${mavenVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git 
a/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/src/main/java/Test.java
 
b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/src/main/java/Test.java
new file mode 100644
index 0000000000..2fc2e941a2
--- /dev/null
+++ 
b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/child/src/main/java/Test.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+public class Test {}
diff --git a/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/pom.xml 
b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/pom.xml
new file mode 100644
index 0000000000..f1c79f062d
--- /dev/null
+++ b/its/core-it-suite/src/test/resources/mng-8527-consumer-pom/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";>
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven</groupId>
+    <artifactId>maven-parent</artifactId>
+    <version>43</version>
+  </parent>
+
+  <groupId>org.apache.maven.its.mng-8527</groupId>
+  <artifactId>parent</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <modules>
+    <module>child</module>
+  </modules>
+
+  <properties>
+    <mavenVersion>4.0.0-rc-2</mavenVersion>
+    <maven.compiler.target>17</maven.compiler.target>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.junit</groupId>
+      <artifactId>junit-bom</artifactId>
+      <version>5.11.4</version>
+      <type>pom</type>
+      <scope>import</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <!-- disable rat plugin -->
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>rat-check</id>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <phase>none</phase>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

Reply via email to