Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -60,19 +61,31 @@
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
* @since 3.2.3
*/
@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);
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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();

Expand All @@ -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 {
Expand Down Expand Up @@ -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();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down