Java tutorial
/** * Copyright (c) 2012 to original author or authors * 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 */ package io.tesla.aether.guice; /* * 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. */ 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.apache.maven.repository.internal.ArtifactDescriptorUtils; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.RequestTrace; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.impl.ArtifactResolver; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.repository.RemoteRepository; 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. * * @author Benjamin Bentmann * @see DefaultArtifactDescriptorReader */ public class DefaultModelResolver implements ModelResolver { private final RepositorySystemSession session; private final RequestTrace trace; private final String context; private List<RemoteRepository> repositories; private final ArtifactResolver resolver; private final RemoteRepositoryManager remoteRepositoryManager; private final Set<String> repositoryIds; public DefaultModelResolver(RepositorySystemSession session, RequestTrace trace, String context, ArtifactResolver resolver, RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories) { this.session = session; this.trace = trace; this.context = context; this.resolver = resolver; this.remoteRepositoryManager = remoteRepositoryManager; this.repositories = repositories; this.repositoryIds = new HashSet<String>(); } private DefaultModelResolver(DefaultModelResolver original) { this.session = original.session; this.trace = original.trace; this.context = original.context; this.resolver = original.resolver; this.remoteRepositoryManager = original.remoteRepositoryManager; this.repositories = original.repositories; this.repositoryIds = new HashSet<String>(original.repositoryIds); } public void addRepository(Repository repository) throws InvalidRepositoryException { if (session.isIgnoreArtifactDescriptorRepositories() || !repositoryIds.add(repository.getId())) { return; } List<RemoteRepository> newRepositories = Collections .singletonList(ArtifactDescriptorUtils.toRemoteRepository(repository)); this.repositories = remoteRepositoryManager.aggregateRepositories(session, repositories, newRepositories, true); } public ModelResolver newCopy() { return new DefaultModelResolver(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); request.setTrace(trace); pomArtifact = resolver.resolveArtifact(session, request).getArtifact(); } catch (ArtifactResolutionException e) { throw new UnresolvableModelException(e.getMessage(), groupId, artifactId, version, e); } File pomFile = pomArtifact.getFile(); return new FileModelSource(pomFile); } }