/* * Copyright 2013 the original author or authors. * * 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.gradle.api.internal.artifacts; import org.gradle.StartParameter; import org.gradle.api.internal.ClassPathRegistry; import org.gradle.api.internal.artifacts.component.ComponentIdentifierFactory; import org.gradle.api.internal.artifacts.component.DefaultBuildIdentifier; import org.gradle.api.internal.artifacts.component.DefaultComponentIdentifierFactory; import org.gradle.api.internal.artifacts.dsl.dependencies.DependencyFactory; import org.gradle.api.internal.artifacts.ivyservice.ArtifactCacheMetaData; import org.gradle.api.internal.artifacts.ivyservice.CacheLockingManager; import org.gradle.api.internal.artifacts.ivyservice.dynamicversions.ModuleVersionsCache; import org.gradle.api.internal.artifacts.ivyservice.dynamicversions.SingleFileBackedModuleVersionsCache; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ComponentResolvers; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.DelegatingComponentResolvers; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ResolveIvyFactory; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ResolverProviderFactory; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.StartParameterResolutionOverride; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.memcache.InMemoryCachedRepositoryFactory; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionComparator; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionSelectorScheme; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionComparator; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme; import org.gradle.api.internal.artifacts.ivyservice.modulecache.DefaultModuleArtifactsCache; import org.gradle.api.internal.artifacts.ivyservice.modulecache.DefaultModuleMetaDataCache; import org.gradle.api.internal.artifacts.ivyservice.modulecache.ModuleArtifactsCache; import org.gradle.api.internal.artifacts.ivyservice.modulecache.ModuleMetaDataCache; import org.gradle.api.internal.artifacts.ivyservice.moduleconverter.ConfigurationComponentMetaDataBuilder; import org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DependencyDescriptorFactory; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.AggregatingProjectArtifactBuilder; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultLocalComponentRegistry; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectLocalComponentProvider; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectPublicationRegistry; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.LocalComponentProvider; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.LocalComponentRegistry; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectArtifactBuilder; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectDependencyResolver; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectLocalComponentProvider; import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectPublicationRegistry; import org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver; import org.gradle.api.internal.artifacts.ivyservice.resolveengine.excludes.ModuleExclusions; import org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.ResolutionResultsStoreFactory; import org.gradle.api.internal.artifacts.mvnsettings.DefaultLocalMavenRepositoryLocator; import org.gradle.api.internal.artifacts.mvnsettings.DefaultMavenFileLocations; import org.gradle.api.internal.artifacts.mvnsettings.DefaultMavenSettingsProvider; import org.gradle.api.internal.artifacts.mvnsettings.LocalMavenRepositoryLocator; import org.gradle.api.internal.artifacts.mvnsettings.MavenSettingsProvider; import org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory; import org.gradle.api.internal.cache.GeneratedGradleJarCache; import org.gradle.api.internal.file.FileLookup; import org.gradle.api.internal.file.TemporaryFileProvider; import org.gradle.api.internal.file.TmpDirTemporaryFileProvider; import org.gradle.api.internal.file.collections.DirectoryFileTreeFactory; import org.gradle.api.internal.filestore.ivy.ArtifactIdentifierFileStore; import org.gradle.api.internal.notations.ClientModuleNotationParserFactory; import org.gradle.api.internal.notations.DependencyNotationParser; import org.gradle.api.internal.notations.ProjectDependencyFactory; import org.gradle.api.internal.project.ProjectInternal; import org.gradle.api.internal.project.ProjectRegistry; import org.gradle.api.internal.runtimeshaded.RuntimeShadedJarFactory; import org.gradle.cache.internal.CacheScopeMapping; import org.gradle.cache.internal.ProducerGuard; import org.gradle.cache.internal.VersionStrategy; import org.gradle.initialization.BuildIdentity; import org.gradle.initialization.DefaultBuildIdentity; import org.gradle.initialization.ProjectAccessListener; import org.gradle.internal.component.external.model.ModuleComponentArtifactMetadata; import org.gradle.internal.installation.CurrentGradleInstallation; import org.gradle.internal.logging.progress.ProgressLoggerFactory; import org.gradle.internal.operations.BuildOperationExecutor; import org.gradle.internal.reflect.Instantiator; import org.gradle.internal.resource.cached.ByUrlCachedExternalResourceIndex; import org.gradle.internal.resource.cached.ExternalResourceFileStore; import org.gradle.internal.resource.cached.ivy.ArtifactAtRepositoryCachedArtifactIndex; import org.gradle.internal.resource.connector.ResourceConnectorFactory; import org.gradle.internal.resource.local.LocallyAvailableResourceFinder; import org.gradle.internal.resource.local.UniquePathKeyFileStore; import org.gradle.internal.resource.local.ivy.LocallyAvailableResourceFinderFactory; import org.gradle.internal.service.ServiceRegistry; import org.gradle.util.BuildCommencedTimeProvider; import java.net.URI; import java.util.List; /** * The set of dependency management services that are created per build. */ class DependencyManagementBuildScopeServices { InMemoryCachedRepositoryFactory createInMemoryDependencyMetadataCache() { return new InMemoryCachedRepositoryFactory(); } DependencyManagementServices createDependencyManagementServices(ServiceRegistry parent) { return new DefaultDependencyManagementServices(parent); } BuildIdentity createBuildIdentity(ProjectRegistry<ProjectInternal> projectRegistry) { ProjectInternal rootProject = projectRegistry.getRootProject(); if (rootProject == null || rootProject.getGradle().getParent() == null) { // BuildIdentity for a top-level build return new DefaultBuildIdentity(new DefaultBuildIdentifier(":", true)); } // BuildIdentity for an included build // This hard-codes the assumption that buildName == rootProject.name for included builds return new DefaultBuildIdentity(new DefaultBuildIdentifier(rootProject.getName(), true)); } ComponentIdentifierFactory createComponentIdentifierFactory(BuildIdentity buildIdentity) { return new DefaultComponentIdentifierFactory(buildIdentity); } DependencyFactory createDependencyFactory( Instantiator instantiator, ProjectAccessListener projectAccessListener, StartParameter startParameter, ClassPathRegistry classPathRegistry, CurrentGradleInstallation currentGradleInstallation, FileLookup fileLookup, RuntimeShadedJarFactory runtimeShadedJarFactory ) { DefaultProjectDependencyFactory factory = new DefaultProjectDependencyFactory( projectAccessListener, instantiator, startParameter.isBuildProjectDependencies()); ProjectDependencyFactory projectDependencyFactory = new ProjectDependencyFactory(factory); return new DefaultDependencyFactory( DependencyNotationParser.parser(instantiator, factory, classPathRegistry, fileLookup, runtimeShadedJarFactory, currentGradleInstallation), new ClientModuleNotationParserFactory(instantiator).create(), projectDependencyFactory); } RuntimeShadedJarFactory createRuntimeShadedJarFactory(GeneratedGradleJarCache jarCache, ProgressLoggerFactory progressLoggerFactory, DirectoryFileTreeFactory directoryFileTreeFactory) { return new RuntimeShadedJarFactory(jarCache, progressLoggerFactory, directoryFileTreeFactory); } BuildCommencedTimeProvider createBuildTimeProvider() { return new BuildCommencedTimeProvider(); } ModuleExclusions createModuleExclusions(ImmutableModuleIdentifierFactory moduleIdentifierFactory) { return new ModuleExclusions(moduleIdentifierFactory); } ModuleVersionsCache createModuleVersionsCache(BuildCommencedTimeProvider timeProvider, CacheLockingManager cacheLockingManager, ImmutableModuleIdentifierFactory moduleIdentifierFactory) { return new SingleFileBackedModuleVersionsCache( timeProvider, cacheLockingManager, moduleIdentifierFactory); } ModuleArtifactsCache createModuleArtifactsCache(BuildCommencedTimeProvider timeProvider, CacheLockingManager cacheLockingManager) { return new DefaultModuleArtifactsCache( timeProvider, cacheLockingManager ); } ModuleMetaDataCache createModuleDescriptorCache(BuildCommencedTimeProvider timeProvider, CacheLockingManager cacheLockingManager, ArtifactCacheMetaData artifactCacheMetaData, ImmutableModuleIdentifierFactory moduleIdentifierFactory, ModuleExclusions moduleExclusions) { return new DefaultModuleMetaDataCache( timeProvider, cacheLockingManager, artifactCacheMetaData, moduleIdentifierFactory, moduleExclusions); } ArtifactAtRepositoryCachedArtifactIndex createArtifactAtRepositoryCachedResolutionIndex(BuildCommencedTimeProvider timeProvider, CacheLockingManager cacheLockingManager) { return new ArtifactAtRepositoryCachedArtifactIndex( "artifact-at-repository", timeProvider, cacheLockingManager ); } ByUrlCachedExternalResourceIndex createArtifactUrlCachedResolutionIndex(BuildCommencedTimeProvider timeProvider, CacheLockingManager cacheLockingManager) { return new ByUrlCachedExternalResourceIndex( "artifact-at-url", timeProvider, cacheLockingManager ); } ArtifactIdentifierFileStore createArtifactRevisionIdFileStore(ArtifactCacheMetaData artifactCacheMetaData) { return new ArtifactIdentifierFileStore(new UniquePathKeyFileStore(artifactCacheMetaData.getFileStoreDirectory()), new TmpDirTemporaryFileProvider()); } ExternalResourceFileStore createExternalResourceFileStore(CacheScopeMapping cacheScopeMapping) { return new ExternalResourceFileStore(cacheScopeMapping.getBaseDirectory(null, "external-resources", VersionStrategy.SharedCache), new TmpDirTemporaryFileProvider()); } MavenSettingsProvider createMavenSettingsProvider() { return new DefaultMavenSettingsProvider(new DefaultMavenFileLocations()); } LocalMavenRepositoryLocator createLocalMavenRepositoryLocator(MavenSettingsProvider mavenSettingsProvider) { return new DefaultLocalMavenRepositoryLocator(mavenSettingsProvider); } LocallyAvailableResourceFinder<ModuleComponentArtifactMetadata> createArtifactRevisionIdLocallyAvailableResourceFinder(ArtifactCacheMetaData artifactCacheMetaData, LocalMavenRepositoryLocator localMavenRepositoryLocator, ArtifactIdentifierFileStore fileStore) { LocallyAvailableResourceFinderFactory finderFactory = new LocallyAvailableResourceFinderFactory( artifactCacheMetaData, localMavenRepositoryLocator, fileStore); return finderFactory.create(); } VersionSelectorScheme createVersionSelectorScheme(VersionComparator versionComparator) { return new DefaultVersionSelectorScheme(versionComparator); } VersionComparator createVersionComparator() { return new DefaultVersionComparator(); } RepositoryTransportFactory createRepositoryTransportFactory(StartParameter startParameter, ProgressLoggerFactory progressLoggerFactory, TemporaryFileProvider temporaryFileProvider, ByUrlCachedExternalResourceIndex externalResourceIndex, BuildCommencedTimeProvider buildCommencedTimeProvider, CacheLockingManager cacheLockingManager, List<ResourceConnectorFactory> resourceConnectorFactories, BuildOperationExecutor buildOperationExecutor, ProducerGuard<URI> producerGuard) { StartParameterResolutionOverride startParameterResolutionOverride = new StartParameterResolutionOverride(startParameter); return new RepositoryTransportFactory( resourceConnectorFactories, progressLoggerFactory, temporaryFileProvider, externalResourceIndex, buildCommencedTimeProvider, cacheLockingManager, buildOperationExecutor, startParameterResolutionOverride, producerGuard); } ResolveIvyFactory createResolveIvyFactory(StartParameter startParameter, ModuleVersionsCache moduleVersionsCache, ModuleMetaDataCache moduleMetaDataCache, ModuleArtifactsCache moduleArtifactsCache, ArtifactAtRepositoryCachedArtifactIndex artifactAtRepositoryCachedArtifactIndex, CacheLockingManager cacheLockingManager, BuildCommencedTimeProvider buildCommencedTimeProvider, InMemoryCachedRepositoryFactory inMemoryCachedRepositoryFactory, VersionSelectorScheme versionSelectorScheme, VersionComparator versionComparator, ImmutableModuleIdentifierFactory moduleIdentifierFactory) { StartParameterResolutionOverride startParameterResolutionOverride = new StartParameterResolutionOverride(startParameter); return new ResolveIvyFactory( moduleVersionsCache, moduleMetaDataCache, moduleArtifactsCache, artifactAtRepositoryCachedArtifactIndex, cacheLockingManager, startParameterResolutionOverride, buildCommencedTimeProvider, inMemoryCachedRepositoryFactory, versionSelectorScheme, versionComparator, moduleIdentifierFactory); } ArtifactDependencyResolver createArtifactDependencyResolver(ResolveIvyFactory resolveIvyFactory, DependencyDescriptorFactory dependencyDescriptorFactory, VersionComparator versionComparator, List<ResolverProviderFactory> resolverFactories, ImmutableModuleIdentifierFactory moduleIdentifierFactory, ModuleExclusions moduleExclusions, BuildOperationExecutor buildOperationExecutor) { return new DefaultArtifactDependencyResolver( buildOperationExecutor, resolverFactories, resolveIvyFactory, dependencyDescriptorFactory, versionComparator, moduleIdentifierFactory, moduleExclusions ); } ResolutionResultsStoreFactory createResolutionResultsStoreFactory(TemporaryFileProvider temporaryFileProvider) { return new ResolutionResultsStoreFactory(temporaryFileProvider); } ProjectPublicationRegistry createProjectPublicationRegistry() { return new DefaultProjectPublicationRegistry(); } ProjectLocalComponentProvider createProjectComponentProvider(ProjectRegistry<ProjectInternal> projectRegistry, ConfigurationComponentMetaDataBuilder metaDataBuilder, ImmutableModuleIdentifierFactory moduleIdentifierFactory) { return new DefaultProjectLocalComponentProvider(projectRegistry, metaDataBuilder, moduleIdentifierFactory); } LocalComponentRegistry createLocalComponentRegistry(List<LocalComponentProvider> providers) { return new DefaultLocalComponentRegistry(providers); } ProjectDependencyResolver createProjectDependencyResolver(LocalComponentRegistry localComponentRegistry, List<ProjectArtifactBuilder> delegateBuilders, ComponentIdentifierFactory componentIdentifierFactory) { ProjectArtifactBuilder artifactBuilder = new AggregatingProjectArtifactBuilder(delegateBuilders); return new ProjectDependencyResolver(localComponentRegistry, artifactBuilder, componentIdentifierFactory); } ResolverProviderFactory createProjectResolverProviderFactory(final ProjectDependencyResolver resolver) { return new ProjectResolverProviderFactory(resolver); } private static class ProjectResolverProviderFactory implements ResolverProviderFactory { private final ProjectDependencyResolver resolver; public ProjectResolverProviderFactory(ProjectDependencyResolver resolver) { this.resolver = resolver; } @Override public boolean canCreate(ResolveContext context) { return true; } @Override public ComponentResolvers create(ResolveContext context) { return DelegatingComponentResolvers.of(resolver); } } }