/* * JBoss, Home of Professional Open Source * Copyright 2012, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed 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.jboss.shrinkwrap.resolver.api.maven; import java.io.File; import java.util.Collection; import java.util.List; import java.util.Set; import org.jboss.shrinkwrap.resolver.api.InvalidConfigurationFileException; import org.jboss.shrinkwrap.resolver.api.ResolutionException; import org.jboss.shrinkwrap.resolver.api.VersionResolutionException; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinate; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.pom.ParsedPomFile; import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepository; import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy; /** * Encapsulates Maven session * * @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a> */ public interface MavenWorkingSession { /** * Gets a set af dependency declarations stored in version management. These dependency declarations are used to get * versions if none are specified in {@link MavenDependency#toCanonicalForm()} and also affect transitive * dependency resolutions. * * @return Set of defined {@link MavenDependency}s */ Set<MavenDependency> getDependencyManagement(); /** * Gets the {@link Set} of dependencies to be resolved for this session * * @return {@link MavenDependency}s to be resolved as part of the request to the backend; may be a subset of * {@link MavenWorkingSession#getDeclaredDependencies()} after pre-request filtering has been done */ List<MavenDependency> getDependenciesForResolution(); /** * Metadata for all defined {@code <dependencies>} elements * * @return Metadata for all defined {@code <dependencies>} elements */ Set<MavenDependency> getDeclaredDependencies(); /** * Loads an effective POM file and updates session settings accordingly. * * @param pomFile which represents Project Object Model file * @param profiles List of profiles to activated/disabled * @return Modified session instance */ MavenWorkingSession loadPomFromFile(File pomFile, String... profiles) throws InvalidConfigurationFileException; /** * Loads Maven configuration and updates session settings accordingly. * * @param globalSettingsFile File which represents global settings file * @param userSettingsFile File which represents user settings file * @return Modified session instance */ MavenWorkingSession configureSettingsFromFile(File globalSettingsFile, File userSettingsFile) throws InvalidConfigurationFileException; Collection<MavenResolvedArtifact> resolveDependencies(MavenResolutionStrategy strategy) throws ResolutionException; /** * Resolves version range request for given coordinate * * @param coordinate The coordinate * @return Resolved version range * @throws VersionResolutionException If the version range request fails */ MavenVersionRangeResult resolveVersionRange(MavenCoordinate coordinate) throws VersionResolutionException; /** * Returns an abstraction of Project Object Model. This abstraction can be used to get additional information about the * project * * @return Information about the project */ ParsedPomFile getParsedPomFile(); /** * Refreshes underlying Aether session in order to contain newly acquired information, such as new settings.xml * content * * @return Modified session instance */ MavenWorkingSession regenerateSession(); /** * Whether or not to set this session in "offline" mode * * @param offline Whether or not to set this session in "offline" mode */ void setOffline(boolean offline); /** * Disables the classpath workspace reader which may be used to resolve from dependencies on the ClassPath */ void disableClassPathWorkspaceReader(); /** * Disables use of the Maven Central Repository */ void disableMavenCentral(); /** * Whether or not to track origin of artifacts present is local repository * * @param useLegacyLocalRepository Whether to ignore origin of artifacts in local repository; defaults to false */ void useLegacyLocalRepository(boolean useLegacyLocalRepository); /** * Adds a remote repository to use in resolution. * * @param repository The remote repository * @throws IllegalArgumentException if argument is null */ void addRemoteRepo(MavenRemoteRepository repository); }