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
}