Java tutorial
/******************************************************************************* * Copyright (c) 2010, 2014 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.aether.internal.ant; import java.io.File; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.maven.model.Repository; import org.apache.maven.model.building.FileModelSource; import org.apache.maven.model.building.ModelSource; import org.apache.maven.model.resolution.InvalidRepositoryException; import org.apache.maven.model.resolution.ModelResolver; import org.apache.maven.model.resolution.UnresolvableModelException; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.repository.RepositoryPolicy; import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; /** * A model resolver to assist building of dependency POMs. This resolver gives priority to those repositories that have * been initially specified and repositories discovered in dependency POMs are recessively merged into the search chain. * */ class AntModelResolver implements ModelResolver { private final RepositorySystemSession session; private final String context; private List<org.eclipse.aether.repository.RemoteRepository> repositories; private final RepositorySystem repoSys; private final RemoteRepositoryManager remoteRepositoryManager; private final Set<String> repositoryIds; public AntModelResolver(RepositorySystemSession session, String context, RepositorySystem repoSys, RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories) { this.session = session; this.context = context; this.repoSys = repoSys; this.remoteRepositoryManager = remoteRepositoryManager; this.repositories = repositories; this.repositoryIds = new HashSet<String>(); } private AntModelResolver(AntModelResolver original) { this.session = original.session; this.context = original.context; this.repoSys = original.repoSys; this.remoteRepositoryManager = original.remoteRepositoryManager; this.repositories = original.repositories; this.repositoryIds = new HashSet<String>(original.repositoryIds); } public void addRepository(Repository repository) throws InvalidRepositoryException { if (!repositoryIds.add(repository.getId())) { return; } List<RemoteRepository> newRepositories = Collections.singletonList(convert(repository)); this.repositories = remoteRepositoryManager.aggregateRepositories(session, repositories, newRepositories, true); } static RemoteRepository convert(Repository repository) { RemoteRepository.Builder builder = new RemoteRepository.Builder(repository.getId(), repository.getLayout(), repository.getUrl()); builder.setSnapshotPolicy(convert(repository.getSnapshots())); builder.setReleasePolicy(convert(repository.getReleases())); return builder.build(); } private static RepositoryPolicy convert(org.apache.maven.model.RepositoryPolicy policy) { boolean enabled = true; String checksums = RepositoryPolicy.CHECKSUM_POLICY_WARN; String updates = RepositoryPolicy.UPDATE_POLICY_DAILY; if (policy != null) { enabled = policy.isEnabled(); if (policy.getUpdatePolicy() != null) { updates = policy.getUpdatePolicy(); } if (policy.getChecksumPolicy() != null) { checksums = policy.getChecksumPolicy(); } } return new RepositoryPolicy(enabled, updates, checksums); } public ModelResolver newCopy() { return new AntModelResolver(this); } public ModelSource resolveModel(String groupId, String artifactId, String version) throws UnresolvableModelException { Artifact pomArtifact = new DefaultArtifact(groupId, artifactId, "", "pom", version); try { ArtifactRequest request = new ArtifactRequest(pomArtifact, repositories, context); pomArtifact = repoSys.resolveArtifact(session, request).getArtifact(); } catch (ArtifactResolutionException e) { throw new UnresolvableModelException("Failed to resolve POM for " + groupId + ":" + artifactId + ":" + version + " due to " + e.getMessage(), groupId, artifactId, version, e); } File pomFile = pomArtifact.getFile(); return new FileModelSource(pomFile); } }