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

sjaranowski pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new f49091e1c1 Repository layout should be used in MavenRepositorySystem
f49091e1c1 is described below

commit f49091e1c12524a2d6237b822a66c1c141ba8920
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Wed Nov 26 22:24:12 2025 +0100

    Repository layout should be used in MavenRepositorySystem
---
 .../apache/maven/bridge/MavenRepositorySystem.java | 93 ++++++++++++++++++++--
 .../DefaultMavenExecutionRequestPopulator.java     |  5 +-
 .../maven/project/DefaultProjectBuilder.java       |  4 +-
 .../project/DefaultProjectBuildingHelper.java      |  2 +-
 .../project/artifact/MavenMetadataSource.java      |  2 +-
 .../maven/AbstractCoreMavenComponentTestCase.java  |  2 +-
 .../DefaultMavenExecutionRequestPopulatorTest.java | 20 +++--
 .../SettingsXmlConfigurationProcessor.java         |  8 +-
 8 files changed, 115 insertions(+), 21 deletions(-)

diff --git 
a/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java 
b/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
index 47cfebcbba..d44efbc76b 100644
--- 
a/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
+++ 
b/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
@@ -36,19 +36,20 @@
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.Authentication;
 import org.apache.maven.artifact.repository.MavenArtifactRepository;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.artifact.resolver.filter.ExclusionArtifactFilter;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
 import org.apache.maven.repository.Proxy;
 import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.settings.Mirror;
@@ -60,6 +61,8 @@
 import org.eclipse.aether.repository.AuthenticationSelector;
 import org.eclipse.aether.repository.ProxySelector;
 import org.eclipse.aether.repository.RemoteRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author Jason van Zyl
@@ -67,12 +70,22 @@
  */
 @Component(role = MavenRepositorySystem.class, hint = "default")
 public class MavenRepositorySystem {
+
+    // Singleton instance for static deprecated methods
+    private static MavenRepositorySystem instance;
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(MavenRepositorySystem.class);
+
     @Requirement
     private ArtifactHandlerManager artifactHandlerManager;
 
     @Requirement(role = ArtifactRepositoryLayout.class)
     private Map<String, ArtifactRepositoryLayout> layouts;
 
+    MavenRepositorySystem() {
+        instance = this;
+    }
+
     // DefaultProjectBuilder
     public Artifact createArtifact(String groupId, String artifactId, String 
version, String scope, String type) {
         return createArtifactX(groupId, artifactId, version, scope, type);
@@ -200,7 +213,7 @@ private void injectMirror(ArtifactRepository repository, 
Mirror mirror) {
             repository.setUrl(mirror.getUrl());
 
             if (StringUtils.isNotEmpty(mirror.getLayout())) {
-                repository.setLayout(getLayout(mirror.getLayout()));
+                repository.setLayout(getLayout(mirror.getId(), 
mirror.getLayout()));
             }
 
             repository.setBlocked(mirror.isBlocked());
@@ -275,8 +288,13 @@ public void injectProxy(RepositorySystemSession session, 
List<ArtifactRepository
         }
     }
 
-    private ArtifactRepositoryLayout getLayout(String id) {
-        ArtifactRepositoryLayout layout = layouts.get(id);
+    private ArtifactRepositoryLayout getLayout(String repoId, String layoutId) 
{
+        ArtifactRepositoryLayout layout = layouts.get(layoutId);
+
+        if (layout == null) {
+            LOGGER.debug("No layout '{}' found for repository id '{}'", 
layoutId, repoId);
+            layout = new UnknownRepositoryLayout(layoutId, 
layouts.get("default"));
+        }
 
         return layout;
     }
@@ -308,13 +326,37 @@ public static org.apache.maven.model.RepositoryPolicy 
fromSettingsRepositoryPoli
         return modelRepositoryPolicy;
     }
 
+    /**
+     * @deprecated use a service method {@link 
#buildArtifactRepositoryFromRepo(org.apache.maven.settings.Repository) instead
+     */
+    @Deprecated
     public static ArtifactRepository 
buildArtifactRepository(org.apache.maven.settings.Repository repo)
             throws InvalidRepositoryException {
-        return buildArtifactRepository(fromSettingsRepository(repo));
+        return instance.buildArtifactRepositoryFromRepo(repo);
     }
 
+    /**
+     * @since 3.9.12
+     */
+    public ArtifactRepository 
buildArtifactRepositoryFromRepo(org.apache.maven.settings.Repository repo)
+            throws InvalidRepositoryException {
+        return buildArtifactRepositoryFromRepo(fromSettingsRepository(repo));
+    }
+
+    /**
+     * @deprecated use a service method {@link 
#buildArtifactRepositoryFromRepo(Repository)}  instead
+     */
+    @Deprecated
     public static ArtifactRepository 
buildArtifactRepository(org.apache.maven.model.Repository repo)
             throws InvalidRepositoryException {
+        return instance.buildArtifactRepositoryFromRepo(repo);
+    }
+
+    /**
+     * @since 3.9.12
+     */
+    public ArtifactRepository 
buildArtifactRepositoryFromRepo(org.apache.maven.model.Repository repo)
+            throws InvalidRepositoryException {
         if (repo != null) {
             String id = repo.getId();
 
@@ -332,7 +374,7 @@ public static ArtifactRepository 
buildArtifactRepository(org.apache.maven.model.
 
             ArtifactRepositoryPolicy releases = 
buildArtifactRepositoryPolicy(repo.getReleases());
 
-            ArtifactRepositoryLayout layout = new DefaultRepositoryLayout();
+            ArtifactRepositoryLayout layout = getLayout(repo.getId(), 
repo.getLayout());
 
             return createArtifactRepository(id, url, layout, snapshots, 
releases);
         } else {
@@ -816,4 +858,43 @@ else if (layout.equals(repoLayout)) {
 
         return result;
     }
+
+    /**
+     * In the future, the legacy system might encounter repository types for 
which no layout components exists because
+     * the actual communication with the repository happens via a repository 
connector. As a minimum, the legacy system
+     * needs to retain the id of this layout so that the content type of the 
remote repository can still be accurately
+     * described.
+     */
+    static class UnknownRepositoryLayout implements ArtifactRepositoryLayout {
+
+        private final String id;
+
+        private final ArtifactRepositoryLayout fallback;
+
+        UnknownRepositoryLayout(String id, ArtifactRepositoryLayout fallback) {
+            this.id = id;
+            this.fallback = fallback;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public String pathOf(Artifact artifact) {
+            return fallback.pathOf(artifact);
+        }
+
+        public String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, 
ArtifactRepository repository) {
+            return fallback.pathOfLocalRepositoryMetadata(metadata, 
repository);
+        }
+
+        public String pathOfRemoteRepositoryMetadata(ArtifactMetadata 
metadata) {
+            return fallback.pathOfRemoteRepositoryMetadata(metadata);
+        }
+
+        @Override
+        public String toString() {
+            return getId();
+        }
+    }
 }
diff --git 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
index f08c7d3828..2d088e11ac 100644
--- 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
+++ 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
@@ -241,7 +241,7 @@ public MavenExecutionRequest 
populateFromSettings(MavenExecutionRequest request,
                 List<Repository> remoteRepositories = 
rawProfile.getRepositories();
                 for (Repository remoteRepository : remoteRepositories) {
                     try {
-                        
request.addRemoteRepository(repositorySystem.buildArtifactRepository(remoteRepository));
+                        
request.addRemoteRepository(repositorySystem.buildArtifactRepositoryFromRepo(remoteRepository));
                     } catch (InvalidRepositoryException e) {
                         // do nothing for now
                     }
@@ -250,7 +250,8 @@ public MavenExecutionRequest 
populateFromSettings(MavenExecutionRequest request,
                 List<Repository> pluginRepositories = 
rawProfile.getPluginRepositories();
                 for (Repository pluginRepo : pluginRepositories) {
                     try {
-                        
request.addPluginArtifactRepository(repositorySystem.buildArtifactRepository(pluginRepo));
+                        request.addPluginArtifactRepository(
+                                
repositorySystem.buildArtifactRepositoryFromRepo(pluginRepo));
                     } catch (InvalidRepositoryException e) {
                         // do nothing for now
                     }
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 9fa8f3c22b..b9592462ef 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -831,7 +831,7 @@ HashMap<String, Artifact> compute() {
             try {
                 DeploymentRepository r = 
project.getDistributionManagement().getRepository();
                 if (!StringUtils.isEmpty(r.getId()) && 
!StringUtils.isEmpty(r.getUrl())) {
-                    ArtifactRepository repo = 
repositorySystem.buildArtifactRepository(r);
+                    ArtifactRepository repo = 
repositorySystem.buildArtifactRepositoryFromRepo(r);
                     
repositorySystem.injectProxy(projectBuildingRequest.getRepositorySession(), 
Arrays.asList(repo));
                     repositorySystem.injectAuthentication(
                             projectBuildingRequest.getRepositorySession(), 
Arrays.asList(repo));
@@ -849,7 +849,7 @@ HashMap<String, Artifact> compute() {
             try {
                 DeploymentRepository r = 
project.getDistributionManagement().getSnapshotRepository();
                 if (!StringUtils.isEmpty(r.getId()) && 
!StringUtils.isEmpty(r.getUrl())) {
-                    ArtifactRepository repo = 
repositorySystem.buildArtifactRepository(r);
+                    ArtifactRepository repo = 
repositorySystem.buildArtifactRepositoryFromRepo(r);
                     
repositorySystem.injectProxy(projectBuildingRequest.getRepositorySession(), 
Arrays.asList(repo));
                     repositorySystem.injectAuthentication(
                             projectBuildingRequest.getRepositorySession(), 
Arrays.asList(repo));
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
index 7581bbdd48..6d585d5242 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
@@ -88,7 +88,7 @@ public List<ArtifactRepository> createArtifactRepositories(
         List<ArtifactRepository> internalRepositories = new ArrayList<>();
 
         for (Repository repository : pomRepositories) {
-            
internalRepositories.add(repositorySystem.buildArtifactRepository(repository));
+            
internalRepositories.add(repositorySystem.buildArtifactRepositoryFromRepo(repository));
         }
 
         repositorySystem.injectMirror(request.getRepositorySession(), 
internalRepositories);
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 
b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 74de25c351..9df7059d07 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -288,7 +288,7 @@ private List<ArtifactRepository> 
getRepositoriesFromModel(RepositorySystemSessio
         List<ArtifactRepository> pomRepositories = new ArrayList<>();
         for (Repository modelRepository : model.getRepositories()) {
             try {
-                
pomRepositories.add(MavenRepositorySystem.buildArtifactRepository(modelRepository));
+                
pomRepositories.add(repositorySystem.buildArtifactRepositoryFromRepo(modelRepository));
             } catch (InvalidRepositoryException e) {
                 // can not use this then
             }
diff --git 
a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
 
b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
index 669fef38cd..fa845b4c6a 100644
--- 
a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
+++ 
b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
@@ -192,7 +192,7 @@ protected List<ArtifactRepository> getRemoteRepositories() 
throws InvalidReposit
         repository.setReleases(policy);
         repository.setSnapshots(policy);
 
-        return 
Arrays.asList(repositorySystem.buildArtifactRepository(repository));
+        return 
Arrays.asList(repositorySystem.buildArtifactRepositoryFromRepo(repository));
     }
 
     protected List<ArtifactRepository> getPluginArtifactRepositories() throws 
InvalidRepositoryException {
diff --git 
a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
 
b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
index d1ef5de324..5d8940351d 100644
--- 
a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
+++ 
b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
@@ -18,21 +18,29 @@
  */
 package org.apache.maven.execution;
 
-import javax.inject.Inject;
-
 import java.util.List;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.settings.Profile;
 import org.apache.maven.settings.Repository;
 import org.apache.maven.settings.Settings;
-import org.eclipse.sisu.launch.InjectedTestCase;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultMavenExecutionRequestPopulatorTest extends PlexusTestCase {
 
-public class DefaultMavenExecutionRequestPopulatorTest extends 
InjectedTestCase {
-    @Inject
-    MavenExecutionRequestPopulator testee;
+    @Override
+    protected void customizeContainerConfiguration(ContainerConfiguration 
configuration) {
+        super.customizeContainerConfiguration(configuration);
+        configuration.setAutoWiring(true);
+        configuration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
+    }
 
     public void testPluginRepositoryInjection() throws Exception {
+
+        MavenExecutionRequestPopulator testee = 
lookup(MavenExecutionRequestPopulator.class);
+
         MavenExecutionRequest request = new DefaultMavenExecutionRequest();
 
         Repository r = new Repository();
diff --git 
a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
 
b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
index dd1024ed02..7d757acaa3 100644
--- 
a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
+++ 
b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
@@ -75,6 +75,9 @@ public class SettingsXmlConfigurationProcessor implements 
ConfigurationProcessor
     @Inject
     private SettingsDecrypter settingsDecrypter;
 
+    @Inject
+    private MavenRepositorySystem mavenRepositorySystem;
+
     @Override
     public void process(CliRequest cliRequest) throws Exception {
         CommandLine commandLine = cliRequest.getCommandLine();
@@ -212,7 +215,8 @@ private MavenExecutionRequest 
populateFromSettings(MavenExecutionRequest request
                 List<Repository> remoteRepositories = 
rawProfile.getRepositories();
                 for (Repository remoteRepository : remoteRepositories) {
                     try {
-                        
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
+                        request.addRemoteRepository(
+                                
mavenRepositorySystem.buildArtifactRepositoryFromRepo(remoteRepository));
                     } catch (InvalidRepositoryException e) {
                         // do nothing for now
                     }
@@ -222,7 +226,7 @@ private MavenExecutionRequest 
populateFromSettings(MavenExecutionRequest request
                 for (Repository pluginRepository : pluginRepositories) {
                     try {
                         request.addPluginArtifactRepository(
-                                
MavenRepositorySystem.buildArtifactRepository(pluginRepository));
+                                
mavenRepositorySystem.buildArtifactRepositoryFromRepo(pluginRepository));
                     } catch (InvalidRepositoryException e) {
                         // do nothing for now
                     }

Reply via email to