diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index c00554799ca5..976b574fface 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -43,7 +43,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.ProjectDependencyGraph; import org.apache.maven.graph.GraphBuilder; -import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory; +import org.apache.maven.internal.RepositorySystemSessionFactory; import org.apache.maven.internal.aether.MavenChainedWorkspaceReader; import org.apache.maven.lifecycle.internal.ExecutionEventCatapult; import org.apache.maven.lifecycle.internal.LifecycleStarter; @@ -91,7 +91,7 @@ public class DefaultMaven implements Maven { private SessionScope sessionScope; @Inject - private DefaultRepositorySystemSessionFactory repositorySessionFactory; + private RepositorySystemSessionFactory repositorySessionFactory; @Inject @Named(GraphBuilder.HINT) @@ -166,7 +166,8 @@ private MavenExecutionResult doExecute(MavenExecutionRequest request) { // so that @SessionScoped components can be @Injected into AbstractLifecycleParticipants. // sessionScope.enter(); - try (RepositorySystemSession.CloseableSession repoSession = newRepositorySession(request)) { + try (RepositorySystemSession.CloseableSession repoSession = + newRepositorySessionBuilder(request).build()) { DefaultRepositorySystemSession mutableSession = new DefaultRepositorySystemSession(repoSession); MavenSession session = new MavenSession(container, mutableSession, request, result); @@ -313,8 +314,13 @@ private void afterSessionEnd(Collection projects, MavenSession ses } } - public RepositorySystemSession.CloseableSession newRepositorySession(MavenExecutionRequest request) { - return repositorySessionFactory.newRepositorySession(request).build(); + @Deprecated + public RepositorySystemSession newRepositorySession(MavenExecutionRequest request) { + return newRepositorySessionBuilder(request).build(); + } + + private RepositorySystemSession.SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) { + return repositorySessionFactory.newRepositorySessionBuilder(request); } private void validateLocalRepository(MavenExecutionRequest request) throws LocalRepositoryNotAccessibleException { diff --git a/maven-core/src/main/java/org/apache/maven/internal/RepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/RepositorySystemSessionFactory.java new file mode 100644 index 000000000000..2a4d0f774e39 --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/internal/RepositorySystemSessionFactory.java @@ -0,0 +1,40 @@ +/* + * 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.internal; + +import org.apache.maven.execution.MavenExecutionRequest; +import org.eclipse.aether.RepositorySystemSession.SessionBuilder; + +/** + * Factory for Resolver session. + * + * @since 3.10.0 + */ +public interface RepositorySystemSessionFactory { + /** + * Creates "ready to use" session builder instance. The factory does not set up one thing: the + * {@link org.eclipse.aether.repository.WorkspaceReader}s, that is caller duty to figure out. Workspace readers + * should be set up as very last thing before using resolver session, that is built by invoking + * {@link SessionBuilder#build()} method. + * + * @param request The maven execution request, must not be {@code null}. + * @return The session builder "ready to use" without workspace readers. + */ + SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request); +} diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index 7f6f0ebc0024..d6978f753087 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import javax.inject.Named; +import javax.inject.Singleton; import java.nio.file.Path; import java.nio.file.Paths; @@ -38,6 +39,7 @@ import org.apache.maven.bridge.MavenRepositorySystem; import org.apache.maven.eventspy.internal.EventSpyDispatcher; import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.internal.RepositorySystemSessionFactory; import org.apache.maven.model.ModelBase; import org.apache.maven.repository.internal.MavenSessionBuilderSupplier; import org.apache.maven.repository.internal.scopes.Maven3ScopeManagerConfiguration; @@ -54,6 +56,7 @@ import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.aether.ConfigurationProperties; +import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.RepositoryException; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; @@ -92,8 +95,9 @@ /** * @since 3.3.0 */ +@Singleton @Named -public class DefaultRepositorySystemSessionFactory { +public class DefaultRepositorySystemSessionFactory implements RepositorySystemSessionFactory { /** * User property for chained LRM: list of "tail" local repository paths (separated by comma), to be used with * {@link ChainedLocalRepositoryManager}. @@ -214,8 +218,18 @@ public class DefaultRepositorySystemSessionFactory { private final InternalScopeManager scopeManager = new ScopeManagerImpl(Maven3ScopeManagerConfiguration.INSTANCE); + /** + * For legacy consumers; hopefully nobody. + */ + @Deprecated + public DefaultRepositorySystemSession newRepositorySession(MavenExecutionRequest request) { + return new DefaultRepositorySystemSession( + newRepositorySessionBuilder(request).build()); + } + @SuppressWarnings("checkstyle:methodlength") - public RepositorySystemSession.SessionBuilder newRepositorySession(MavenExecutionRequest request) { + @Override + public RepositorySystemSession.SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) { // config Map configProps = new LinkedHashMap<>(); configProps.put(ConfigurationProperties.USER_AGENT, getUserAgent()); diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java index fabbeafd9db1..c11e6ce89378 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java @@ -92,8 +92,9 @@ public BootstrapCoreExtensionManager( public List loadCoreExtensions( MavenExecutionRequest request, Set providedArtifacts, List extensions) throws Exception { - try (RepositorySystemSession.CloseableSession repoSession = - repositorySystemSessionFactory.newRepositorySession(request).build()) { + try (RepositorySystemSession.CloseableSession repoSession = repositorySystemSessionFactory + .newRepositorySessionBuilder(request) + .build()) { List repositories = RepositoryUtils.toRepos(request.getPluginArtifactRepositories()); Interpolator interpolator = createInterpolator(request);