[MNG-6110] Upgrade Aether to Maven Resolver 1.2 o Updated to rename 'maven-aether-provider' to 'maven-resolver-provider'.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/58554032 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/58554032 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/58554032 Branch: refs/heads/master Commit: 58554032fe026f3fa3588be7911505d1aa1fff3f Parents: 624a736 Author: Christian Schulte <schu...@apache.org> Authored: Sun Dec 11 23:36:04 2016 +0100 Committer: Christian Schulte <schu...@apache.org> Committed: Sun Dec 11 23:36:04 2016 +0100 ---------------------------------------------------------------------- maven-aether-provider/pom.xml | 139 ----- .../ArtifactDescriptorReaderDelegate.java | 157 ----- .../internal/ArtifactDescriptorUtils.java | 81 --- .../DefaultArtifactDescriptorReader.java | 415 ------------- .../repository/internal/DefaultModelCache.java | 119 ---- .../internal/DefaultModelResolver.java | 279 --------- .../internal/DefaultVersionRangeResolver.java | 327 ---------- .../DefaultVersionRangeResultFilter.java | 45 -- .../internal/DefaultVersionResolver.java | 612 ------------------- .../internal/LocalSnapshotMetadata.java | 163 ----- .../LocalSnapshotMetadataGenerator.java | 82 --- .../repository/internal/MavenAetherModule.java | 76 --- .../repository/internal/MavenMetadata.java | 137 ----- .../internal/MavenRepositorySystemUtils.java | 146 ----- .../internal/MavenSnapshotMetadata.java | 100 --- .../internal/MavenWorkspaceReader.java | 32 - .../repository/internal/RelocatedArtifact.java | 114 ---- .../internal/RemoteSnapshotMetadata.java | 157 ----- .../RemoteSnapshotMetadataGenerator.java | 107 ---- .../SnapshotMetadataGeneratorFactory.java | 52 -- .../internal/VersionRangeResultFilter.java | 45 -- .../repository/internal/VersionsMetadata.java | 133 ---- .../internal/VersionsMetadataGenerator.java | 108 ---- .../VersionsMetadataGeneratorFactory.java | 52 -- .../maven/repository/internal/package-info.java | 25 - maven-aether-provider/src/site/apt/index.apt | 33 - maven-aether-provider/src/site/site.xml | 36 -- .../internal/AbstractRepositoryTestCase.java | 87 --- .../DefaultArtifactDescriptorReaderTest.java | 77 --- .../DefaultVersionRangeResolverTest.java | 455 -------------- .../internal/DefaultVersionResolverTest.java | 96 --- .../MavenRepositorySystemUtilsTest.java | 45 -- .../internal/RemoteSnapshotMetadataTest.java | 82 --- .../internal/RepositorySystemTest.java | 220 ------- .../util/ConsoleRepositoryListener.java | 132 ---- .../internal/util/ConsoleTransferListener.java | 186 ------ .../07.20.3-SNAPSHOT/maven-metadata.xml | 49 -- .../0.4.0-SNAPSHOT/maven-metadata.xml | 47 -- .../maven/its/mng-3092/maven-metadata.xml | 104 ---- .../artifact/1.0/artifact-1.0-classifier.zip | 0 .../ut/simple/artifact/1.0/artifact-1.0.jar | 0 .../ut/simple/artifact/1.0/artifact-1.0.pom | 48 -- .../ut/simple/artifact/1.0/artifact-1.0.zip | 0 .../repo/ut/simple/artifact/maven-metadata.xml | 34 -- .../dependency/1.0/dependency-1.0-sources.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.pom | 31 - .../ut/simple/dependency/maven-metadata.xml | 34 -- .../repo/ut/simple/parent/1.0/parent-1.0.pom | 43 -- .../repo/ut/simple/parent/maven-metadata.xml | 34 -- maven-compat/pom.xml | 2 +- maven-core/pom.xml | 2 +- .../main/resources/META-INF/maven/extension.xml | 13 +- maven-resolver-provider/pom.xml | 139 +++++ .../ArtifactDescriptorReaderDelegate.java | 157 +++++ .../internal/ArtifactDescriptorUtils.java | 81 +++ .../DefaultArtifactDescriptorReader.java | 415 +++++++++++++ .../repository/internal/DefaultModelCache.java | 119 ++++ .../internal/DefaultModelResolver.java | 279 +++++++++ .../internal/DefaultVersionRangeResolver.java | 327 ++++++++++ .../DefaultVersionRangeResultFilter.java | 45 ++ .../internal/DefaultVersionResolver.java | 612 +++++++++++++++++++ .../internal/LocalSnapshotMetadata.java | 163 +++++ .../LocalSnapshotMetadataGenerator.java | 82 +++ .../repository/internal/MavenAetherModule.java | 80 +++ .../repository/internal/MavenMetadata.java | 137 +++++ .../internal/MavenRepositorySystemUtils.java | 146 +++++ .../internal/MavenResolverModule.java | 70 +++ .../internal/MavenSnapshotMetadata.java | 100 +++ .../internal/MavenWorkspaceReader.java | 32 + .../repository/internal/RelocatedArtifact.java | 114 ++++ .../internal/RemoteSnapshotMetadata.java | 157 +++++ .../RemoteSnapshotMetadataGenerator.java | 107 ++++ .../SnapshotMetadataGeneratorFactory.java | 52 ++ .../internal/VersionRangeResultFilter.java | 45 ++ .../repository/internal/VersionsMetadata.java | 133 ++++ .../internal/VersionsMetadataGenerator.java | 108 ++++ .../VersionsMetadataGeneratorFactory.java | 52 ++ .../maven/repository/internal/package-info.java | 25 + maven-resolver-provider/src/site/apt/index.apt | 33 + maven-resolver-provider/src/site/site.xml | 36 ++ .../internal/AbstractRepositoryTestCase.java | 87 +++ .../DefaultArtifactDescriptorReaderTest.java | 77 +++ .../DefaultVersionRangeResolverTest.java | 455 ++++++++++++++ .../internal/DefaultVersionResolverTest.java | 96 +++ .../MavenRepositorySystemUtilsTest.java | 45 ++ .../internal/RemoteSnapshotMetadataTest.java | 82 +++ .../internal/RepositorySystemTest.java | 220 +++++++ .../util/ConsoleRepositoryListener.java | 132 ++++ .../internal/util/ConsoleTransferListener.java | 186 ++++++ .../07.20.3-SNAPSHOT/maven-metadata.xml | 49 ++ .../0.4.0-SNAPSHOT/maven-metadata.xml | 47 ++ .../maven/its/mng-3092/maven-metadata.xml | 104 ++++ .../artifact/1.0/artifact-1.0-classifier.zip | 0 .../ut/simple/artifact/1.0/artifact-1.0.jar | 0 .../ut/simple/artifact/1.0/artifact-1.0.pom | 48 ++ .../ut/simple/artifact/1.0/artifact-1.0.zip | 0 .../repo/ut/simple/artifact/maven-metadata.xml | 34 ++ .../dependency/1.0/dependency-1.0-sources.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.pom | 31 + .../ut/simple/dependency/maven-metadata.xml | 34 ++ .../repo/ut/simple/parent/1.0/parent-1.0.pom | 43 ++ .../repo/ut/simple/parent/maven-metadata.xml | 34 ++ pom.xml | 4 +- src/site/resources/images/maven-deps.png | Bin 75522 -> 136318 bytes src/site/xdoc/index.xml | 4 +- src/site/xdoc/maven-deps.odg | Bin 34309 -> 18245 bytes 108 files changed, 5664 insertions(+), 5587 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/pom.xml ---------------------------------------------------------------------- diff --git a/maven-aether-provider/pom.xml b/maven-aether-provider/pom.xml deleted file mode 100644 index 4579ae5..0000000 --- a/maven-aether-provider/pom.xml +++ /dev/null @@ -1,139 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- -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. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.maven</groupId> - <artifactId>maven</artifactId> - <version>3.4.0-SNAPSHOT</version> - </parent> - - <artifactId>maven-aether-provider</artifactId> - - <name>Maven Aether Provider</name> - <description>Extensions to Maven Resolver for utilizing Maven POM and repository metadata.</description> - - <dependencies> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-model</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-model-builder</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-repository-metadata</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-spi</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-util</artifactId> - </dependency> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-impl</artifactId> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-component-annotations</artifactId> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-utils</artifactId> - </dependency> - <dependency> - <groupId>com.google.inject</groupId> - <artifactId>guice</artifactId> - <classifier>no_aop</classifier> - <optional>true</optional> - <exclusions> - <exclusion> - <groupId>aopalliance</groupId> - <artifactId>aopalliance</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - </dependency> - <dependency> - <groupId>org.eclipse.sisu</groupId> - <artifactId>org.eclipse.sisu.inject</artifactId> - </dependency> - <dependency> - <groupId>org.eclipse.sisu</groupId> - <artifactId>org.eclipse.sisu.plexus</artifactId> - </dependency> - <dependency> - <groupId>javax.inject</groupId> - <artifactId>javax.inject</artifactId> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-connector-basic</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-transport-wagon</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-file</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-core</artifactId> - <version>1.10.19</version> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-component-metadata</artifactId> - </plugin> - </plugins> - </build> - -</project> - http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java deleted file mode 100644 index 284ee86..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.apache.maven.model.DependencyManagement; -import org.apache.maven.model.DistributionManagement; -import org.apache.maven.model.License; -import org.apache.maven.model.Model; -import org.apache.maven.model.Prerequisites; -import org.apache.maven.model.Repository; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.artifact.ArtifactProperties; -import org.eclipse.aether.artifact.ArtifactType; -import org.eclipse.aether.artifact.ArtifactTypeRegistry; -import org.eclipse.aether.artifact.DefaultArtifact; -import org.eclipse.aether.artifact.DefaultArtifactType; -import org.eclipse.aether.graph.Dependency; -import org.eclipse.aether.graph.Exclusion; -import org.eclipse.aether.resolution.ArtifactDescriptorResult; - -/** - * Populates Aether {@link ArtifactDescriptorResult} from Maven project {@link Model}. - * - * @since 3.2.4 - * @provisional This class is part of work in progress and can be changed or removed without notice. - */ -public class ArtifactDescriptorReaderDelegate -{ - public void populateResult( RepositorySystemSession session, ArtifactDescriptorResult result, Model model ) - { - ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry(); - - for ( Repository r : model.getRepositories() ) - { - result.addRepository( ArtifactDescriptorUtils.toRemoteRepository( r ) ); - } - - for ( org.apache.maven.model.Dependency dependency : model.getDependencies() ) - { - result.addDependency( convert( dependency, stereotypes ) ); - } - - DependencyManagement mngt = model.getDependencyManagement(); - if ( mngt != null ) - { - for ( org.apache.maven.model.Dependency dependency : mngt.getDependencies() ) - { - result.addManagedDependency( convert( dependency, stereotypes ) ); - } - } - - Map<String, Object> properties = new LinkedHashMap<>(); - - Prerequisites prerequisites = model.getPrerequisites(); - if ( prerequisites != null ) - { - properties.put( "prerequisites.maven", prerequisites.getMaven() ); - } - - List<License> licenses = model.getLicenses(); - properties.put( "license.count", licenses.size() ); - for ( int i = 0; i < licenses.size(); i++ ) - { - License license = licenses.get( i ); - properties.put( "license." + i + ".name", license.getName() ); - properties.put( "license." + i + ".url", license.getUrl() ); - properties.put( "license." + i + ".comments", license.getComments() ); - properties.put( "license." + i + ".distribution", license.getDistribution() ); - } - - result.setProperties( properties ); - - setArtifactProperties( result, model ); - } - - private Dependency convert( org.apache.maven.model.Dependency dependency, ArtifactTypeRegistry stereotypes ) - { - ArtifactType stereotype = stereotypes.get( dependency.getType() ); - if ( stereotype == null ) - { - stereotype = new DefaultArtifactType( dependency.getType() ); - } - - boolean system = dependency.getSystemPath() != null && dependency.getSystemPath().length() > 0; - - Map<String, String> props = null; - if ( system ) - { - props = Collections.singletonMap( ArtifactProperties.LOCAL_PATH, dependency.getSystemPath() ); - } - - Artifact artifact = - new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null, - dependency.getVersion(), props, stereotype ); - - List<Exclusion> exclusions = new ArrayList<>( dependency.getExclusions().size() ); - for ( org.apache.maven.model.Exclusion exclusion : dependency.getExclusions() ) - { - exclusions.add( convert( exclusion ) ); - } - - Dependency result = new Dependency( artifact, dependency.getScope(), - dependency.getOptional() != null - ? dependency.isOptional() - : null, - exclusions ); - - return result; - } - - private Exclusion convert( org.apache.maven.model.Exclusion exclusion ) - { - return new Exclusion( exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*" ); - } - - private void setArtifactProperties( ArtifactDescriptorResult result, Model model ) - { - String downloadUrl = null; - DistributionManagement distMngt = model.getDistributionManagement(); - if ( distMngt != null ) - { - downloadUrl = distMngt.getDownloadUrl(); - } - if ( downloadUrl != null && downloadUrl.length() > 0 ) - { - Artifact artifact = result.getArtifact(); - Map<String, String> props = new HashMap<>( artifact.getProperties() ); - props.put( ArtifactProperties.DOWNLOAD_URL, downloadUrl ); - result.setArtifact( artifact.setProperties( props ) ); - } - } -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java deleted file mode 100644 index 7d4ede8..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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 org.apache.maven.model.Repository; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.artifact.DefaultArtifact; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.repository.RepositoryPolicy; - -/** - * <strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part - * of the public API. In particular, this class can be changed or deleted without prior notice. - * - * @author Benjamin Bentmann - */ -public class ArtifactDescriptorUtils -{ - - public static Artifact toPomArtifact( Artifact artifact ) - { - Artifact pomArtifact = artifact; - - if ( pomArtifact.getClassifier().length() > 0 || !"pom".equals( pomArtifact.getExtension() ) ) - { - pomArtifact = - new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), "pom", artifact.getVersion() ); - } - - return pomArtifact; - } - - public static RemoteRepository toRemoteRepository( Repository repository ) - { - RemoteRepository.Builder builder = - new RemoteRepository.Builder( repository.getId(), repository.getLayout(), repository.getUrl() ); - builder.setSnapshotPolicy( toRepositoryPolicy( repository.getSnapshots() ) ); - builder.setReleasePolicy( toRepositoryPolicy( repository.getReleases() ) ); - return builder.build(); - } - - public static RepositoryPolicy toRepositoryPolicy( 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 ); - } - -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java deleted file mode 100644 index 0f31330..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java +++ /dev/null @@ -1,415 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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.util.LinkedHashSet; -import java.util.Map; -import java.util.Properties; -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Named; - -import org.apache.commons.lang3.Validate; -import org.apache.maven.model.DistributionManagement; -import org.apache.maven.model.Model; -import org.apache.maven.model.Relocation; -import org.apache.maven.model.building.DefaultModelBuilderFactory; -import org.apache.maven.model.building.DefaultModelBuildingRequest; -import org.apache.maven.model.building.FileModelSource; -import org.apache.maven.model.building.ModelBuilder; -import org.apache.maven.model.building.ModelBuildingException; -import org.apache.maven.model.building.ModelBuildingRequest; -import org.apache.maven.model.building.ModelProblem; -import org.apache.maven.model.resolution.UnresolvableModelException; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; -import org.eclipse.aether.RepositoryEvent; -import org.eclipse.aether.RepositoryEvent.EventType; -import org.eclipse.aether.RepositoryException; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.RequestTrace; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.impl.ArtifactDescriptorReader; -import org.eclipse.aether.impl.ArtifactResolver; -import org.eclipse.aether.impl.RemoteRepositoryManager; -import org.eclipse.aether.impl.RepositoryEventDispatcher; -import org.eclipse.aether.impl.VersionRangeResolver; -import org.eclipse.aether.impl.VersionResolver; -import org.eclipse.aether.repository.WorkspaceReader; -import org.eclipse.aether.repository.WorkspaceRepository; -import org.eclipse.aether.resolution.ArtifactDescriptorException; -import org.eclipse.aether.resolution.ArtifactDescriptorPolicy; -import org.eclipse.aether.resolution.ArtifactDescriptorPolicyRequest; -import org.eclipse.aether.resolution.ArtifactDescriptorRequest; -import org.eclipse.aether.resolution.ArtifactDescriptorResult; -import org.eclipse.aether.resolution.ArtifactRequest; -import org.eclipse.aether.resolution.ArtifactResolutionException; -import org.eclipse.aether.resolution.ArtifactResult; -import org.eclipse.aether.resolution.VersionRequest; -import org.eclipse.aether.resolution.VersionResolutionException; -import org.eclipse.aether.resolution.VersionResult; -import org.eclipse.aether.spi.locator.Service; -import org.eclipse.aether.spi.locator.ServiceLocator; -import org.eclipse.aether.spi.log.Logger; -import org.eclipse.aether.spi.log.LoggerFactory; -import org.eclipse.aether.spi.log.NullLoggerFactory; -import org.eclipse.aether.transfer.ArtifactNotFoundException; - -/** - * @author Benjamin Bentmann - */ -@Named -@Component( role = ArtifactDescriptorReader.class ) -public class DefaultArtifactDescriptorReader - implements ArtifactDescriptorReader, Service -{ - - @SuppressWarnings( "unused" ) - @Requirement( role = LoggerFactory.class ) - private Logger logger = NullLoggerFactory.LOGGER; - - @Requirement - private RemoteRepositoryManager remoteRepositoryManager; - - @Requirement - private VersionResolver versionResolver; - - @Requirement - private VersionRangeResolver versionRangeResolver; - - @Requirement - private ArtifactResolver artifactResolver; - - @Requirement - private RepositoryEventDispatcher repositoryEventDispatcher; - - @Requirement - private ModelBuilder modelBuilder; - - public DefaultArtifactDescriptorReader() - { - // enable no-arg constructor - } - - @Inject - DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver, - ArtifactResolver artifactResolver, ModelBuilder modelBuilder, - RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory ) - { - setRemoteRepositoryManager( remoteRepositoryManager ); - setVersionResolver( versionResolver ); - setArtifactResolver( artifactResolver ); - setModelBuilder( modelBuilder ); - setLoggerFactory( loggerFactory ); - setRepositoryEventDispatcher( repositoryEventDispatcher ); - } - - public void initService( ServiceLocator locator ) - { - setLoggerFactory( locator.getService( LoggerFactory.class ) ); - setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) ); - setVersionResolver( locator.getService( VersionResolver.class ) ); - setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) ); - setArtifactResolver( locator.getService( ArtifactResolver.class ) ); - setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) ); - modelBuilder = locator.getService( ModelBuilder.class ); - if ( modelBuilder == null ) - { - setModelBuilder( new DefaultModelBuilderFactory().newInstance() ); - } - } - - public DefaultArtifactDescriptorReader setLoggerFactory( LoggerFactory loggerFactory ) - { - this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() ); - return this; - } - - void setLogger( LoggerFactory loggerFactory ) - { - // plexus support - setLoggerFactory( loggerFactory ); - } - - public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager ) - { - this.remoteRepositoryManager = Validate.notNull( remoteRepositoryManager, - "remoteRepositoryManager cannot be null" ); - return this; - } - - public DefaultArtifactDescriptorReader setVersionResolver( VersionResolver versionResolver ) - { - this.versionResolver = Validate.notNull( versionResolver, "versionResolver cannot be null" ); - return this; - } - - /** @since 3.2.2 */ - public DefaultArtifactDescriptorReader setVersionRangeResolver( VersionRangeResolver versionRangeResolver ) - { - this.versionRangeResolver = Validate.notNull( versionRangeResolver, "versionRangeResolver cannot be null" ); - return this; - } - - public DefaultArtifactDescriptorReader setArtifactResolver( ArtifactResolver artifactResolver ) - { - this.artifactResolver = Validate.notNull( artifactResolver, "artifactResolver cannot be null" ); - return this; - } - - public DefaultArtifactDescriptorReader setRepositoryEventDispatcher( - RepositoryEventDispatcher repositoryEventDispatcher ) - { - this.repositoryEventDispatcher = Validate.notNull( repositoryEventDispatcher, - "repositoryEventDispatcher cannot be null" ); - return this; - } - - public DefaultArtifactDescriptorReader setModelBuilder( ModelBuilder modelBuilder ) - { - this.modelBuilder = Validate.notNull( modelBuilder, "modelBuilder cannot be null" ); - return this; - } - - public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session, - ArtifactDescriptorRequest request ) - throws ArtifactDescriptorException - { - ArtifactDescriptorResult result = new ArtifactDescriptorResult( request ); - - Model model = loadPom( session, request, result ); - if ( model != null ) - { - Map<String, Object> config = session.getConfigProperties(); - ArtifactDescriptorReaderDelegate delegate = - (ArtifactDescriptorReaderDelegate) config.get( ArtifactDescriptorReaderDelegate.class.getName() ); - - if ( delegate == null ) - { - delegate = new ArtifactDescriptorReaderDelegate(); - } - - delegate.populateResult( session, result, model ); - } - - return result; - } - - private Model loadPom( RepositorySystemSession session, ArtifactDescriptorRequest request, - ArtifactDescriptorResult result ) - throws ArtifactDescriptorException - { - RequestTrace trace = RequestTrace.newChild( request.getTrace(), request ); - - Set<String> visited = new LinkedHashSet<>(); - for ( Artifact a = request.getArtifact();; ) - { - Artifact pomArtifact = ArtifactDescriptorUtils.toPomArtifact( a ); - try - { - VersionRequest versionRequest = - new VersionRequest( a, request.getRepositories(), request.getRequestContext() ); - versionRequest.setTrace( trace ); - VersionResult versionResult = versionResolver.resolveVersion( session, versionRequest ); - - a = a.setVersion( versionResult.getVersion() ); - - versionRequest = - new VersionRequest( pomArtifact, request.getRepositories(), request.getRequestContext() ); - versionRequest.setTrace( trace ); - versionResult = versionResolver.resolveVersion( session, versionRequest ); - - pomArtifact = pomArtifact.setVersion( versionResult.getVersion() ); - } - catch ( VersionResolutionException e ) - { - result.addException( e ); - throw new ArtifactDescriptorException( result ); - } - - if ( !visited.add( a.getGroupId() + ':' + a.getArtifactId() + ':' + a.getBaseVersion() ) ) - { - RepositoryException exception = - new RepositoryException( "Artifact relocations form a cycle: " + visited ); - invalidDescriptor( session, trace, a, exception ); - if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_INVALID ) != 0 ) - { - return null; - } - result.addException( exception ); - throw new ArtifactDescriptorException( result ); - } - - ArtifactResult resolveResult; - try - { - ArtifactRequest resolveRequest = - new ArtifactRequest( pomArtifact, request.getRepositories(), request.getRequestContext() ); - resolveRequest.setTrace( trace ); - resolveResult = artifactResolver.resolveArtifact( session, resolveRequest ); - pomArtifact = resolveResult.getArtifact(); - result.setRepository( resolveResult.getRepository() ); - } - catch ( ArtifactResolutionException e ) - { - if ( e.getCause() instanceof ArtifactNotFoundException ) - { - missingDescriptor( session, trace, a, (Exception) e.getCause() ); - if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_MISSING ) != 0 ) - { - return null; - } - } - result.addException( e ); - throw new ArtifactDescriptorException( result ); - } - - Model model; - - // hack: don't rebuild model if it was already loaded during reactor resolution - final WorkspaceReader workspace = session.getWorkspaceReader(); - if ( workspace instanceof MavenWorkspaceReader ) - { - model = ( (MavenWorkspaceReader) workspace ).findModel( pomArtifact ); - if ( model != null ) - { - return model; - } - } - - try - { - ModelBuildingRequest modelRequest = new DefaultModelBuildingRequest(); - modelRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); - modelRequest.setProcessPlugins( false ); - modelRequest.setTwoPhaseBuilding( false ); - modelRequest.setSystemProperties( toProperties( session.getUserProperties(), - session.getSystemProperties() ) ); - modelRequest.setModelCache( DefaultModelCache.newInstance( session ) ); - modelRequest.setModelResolver( new DefaultModelResolver( session, trace.newChild( modelRequest ), - request.getRequestContext(), artifactResolver, - versionRangeResolver, remoteRepositoryManager, - request.getRepositories() ) ); - if ( resolveResult.getRepository() instanceof WorkspaceRepository ) - { - modelRequest.setPomFile( pomArtifact.getFile() ); - } - else - { - modelRequest.setModelSource( new FileModelSource( pomArtifact.getFile() ) ); - } - - model = modelBuilder.build( modelRequest ).getEffectiveModel(); - } - catch ( ModelBuildingException e ) - { - for ( ModelProblem problem : e.getProblems() ) - { - if ( problem.getException() instanceof UnresolvableModelException ) - { - result.addException( problem.getException() ); - throw new ArtifactDescriptorException( result ); - } - } - invalidDescriptor( session, trace, a, e ); - if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_INVALID ) != 0 ) - { - return null; - } - result.addException( e ); - throw new ArtifactDescriptorException( result ); - } - - Relocation relocation = getRelocation( model ); - - if ( relocation != null ) - { - result.addRelocation( a ); - a = - new RelocatedArtifact( a, relocation.getGroupId(), relocation.getArtifactId(), - relocation.getVersion() ); - result.setArtifact( a ); - } - else - { - return model; - } - } - } - - private Properties toProperties( Map<String, String> dominant, Map<String, String> recessive ) - { - Properties props = new Properties(); - if ( recessive != null ) - { - props.putAll( recessive ); - } - if ( dominant != null ) - { - props.putAll( dominant ); - } - return props; - } - - private Relocation getRelocation( Model model ) - { - Relocation relocation = null; - DistributionManagement distMngt = model.getDistributionManagement(); - if ( distMngt != null ) - { - relocation = distMngt.getRelocation(); - } - return relocation; - } - - private void missingDescriptor( RepositorySystemSession session, RequestTrace trace, Artifact artifact, - Exception exception ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DESCRIPTOR_MISSING ); - event.setTrace( trace ); - event.setArtifact( artifact ); - event.setException( exception ); - - repositoryEventDispatcher.dispatch( event.build() ); - } - - private void invalidDescriptor( RepositorySystemSession session, RequestTrace trace, Artifact artifact, - Exception exception ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DESCRIPTOR_INVALID ); - event.setTrace( trace ); - event.setArtifact( artifact ); - event.setException( exception ); - - repositoryEventDispatcher.dispatch( event.build() ); - } - - private int getPolicy( RepositorySystemSession session, Artifact a, ArtifactDescriptorRequest request ) - { - ArtifactDescriptorPolicy policy = session.getArtifactDescriptorPolicy(); - if ( policy == null ) - { - return ArtifactDescriptorPolicy.STRICT; - } - return policy.getPolicy( session, new ArtifactDescriptorPolicyRequest( a, request.getRequestContext() ) ); - } - -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java deleted file mode 100644 index f13495d..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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 org.apache.maven.model.building.ModelCache; -import org.eclipse.aether.RepositoryCache; -import org.eclipse.aether.RepositorySystemSession; - -/** - * A model builder cache backed by the repository system cache. - * - * @author Benjamin Bentmann - */ -class DefaultModelCache - implements ModelCache -{ - - private final RepositorySystemSession session; - - private final RepositoryCache cache; - - public static ModelCache newInstance( RepositorySystemSession session ) - { - if ( session.getCache() == null ) - { - return null; - } - else - { - return new DefaultModelCache( session ); - } - } - - private DefaultModelCache( RepositorySystemSession session ) - { - this.session = session; - this.cache = session.getCache(); - } - - public Object get( String groupId, String artifactId, String version, String tag ) - { - return cache.get( session, new Key( groupId, artifactId, version, tag ) ); - } - - public void put( String groupId, String artifactId, String version, String tag, Object data ) - { - cache.put( session, new Key( groupId, artifactId, version, tag ), data ); - } - - static class Key - { - - private final String groupId; - - private final String artifactId; - - private final String version; - - private final String tag; - - private final int hash; - - public Key( String groupId, String artifactId, String version, String tag ) - { - this.groupId = groupId; - this.artifactId = artifactId; - this.version = version; - this.tag = tag; - - int h = 17; - h = h * 31 + this.groupId.hashCode(); - h = h * 31 + this.artifactId.hashCode(); - h = h * 31 + this.version.hashCode(); - h = h * 31 + this.tag.hashCode(); - hash = h; - } - - @Override - public boolean equals( Object obj ) - { - if ( this == obj ) - { - return true; - } - if ( null == obj || !getClass().equals( obj.getClass() ) ) - { - return false; - } - - Key that = (Key) obj; - return artifactId.equals( that.artifactId ) && groupId.equals( that.groupId ) - && version.equals( that.version ) && tag.equals( that.tag ); - } - - @Override - public int hashCode() - { - return hash; - } - - } -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java deleted file mode 100644 index 0832a3a..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java +++ /dev/null @@ -1,279 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.maven.model.Dependency; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; -import org.apache.maven.model.Parent; -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.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.impl.VersionRangeResolver; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.resolution.ArtifactRequest; -import org.eclipse.aether.resolution.ArtifactResolutionException; -import org.eclipse.aether.resolution.VersionRangeRequest; -import org.eclipse.aether.resolution.VersionRangeResolutionException; -import org.eclipse.aether.resolution.VersionRangeResult; - -/** - * 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 - */ -class DefaultModelResolver - implements ModelResolver -{ - - private final RepositorySystemSession session; - - private final RequestTrace trace; - - private final String context; - - private List<RemoteRepository> repositories; - - private final List<RemoteRepository> externalRepositories; - - private final ArtifactResolver resolver; - - private final VersionRangeResolver versionRangeResolver; - - private final RemoteRepositoryManager remoteRepositoryManager; - - private final Set<String> repositoryIds; - - public DefaultModelResolver( RepositorySystemSession session, RequestTrace trace, String context, - ArtifactResolver resolver, VersionRangeResolver versionRangeResolver, - RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories ) - { - this.session = session; - this.trace = trace; - this.context = context; - this.resolver = resolver; - this.versionRangeResolver = versionRangeResolver; - this.remoteRepositoryManager = remoteRepositoryManager; - this.repositories = repositories; - List<RemoteRepository> externalRepositories = new ArrayList<>(); - externalRepositories.addAll( repositories ); - this.externalRepositories = Collections.unmodifiableList( externalRepositories ); - - this.repositoryIds = new HashSet<>(); - } - - private DefaultModelResolver( DefaultModelResolver original ) - { - this.session = original.session; - this.trace = original.trace; - this.context = original.context; - this.resolver = original.resolver; - this.versionRangeResolver = original.versionRangeResolver; - this.remoteRepositoryManager = original.remoteRepositoryManager; - this.repositories = new ArrayList<>( original.repositories ); - this.externalRepositories = original.externalRepositories; - this.repositoryIds = new HashSet<>( original.repositoryIds ); - } - - @Override - public void addRepository( Repository repository ) - throws InvalidRepositoryException - { - addRepository( repository, false ); - } - - @Override - public void addRepository( final Repository repository, boolean replace ) - throws InvalidRepositoryException - { - if ( session.isIgnoreArtifactDescriptorRepositories() ) - { - return; - } - - if ( !repositoryIds.add( repository.getId() ) ) - { - if ( !replace ) - { - return; - } - - removeMatchingRepository( repositories, repository.getId() ); - } - - List<RemoteRepository> newRepositories = - Collections.singletonList( ArtifactDescriptorUtils.toRemoteRepository( repository ) ); - - this.repositories = - remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories, true ); - } - - private static void removeMatchingRepository( Iterable<RemoteRepository> repositories, final String id ) - { - Iterables.removeIf( repositories, new Predicate<RemoteRepository>() - { - @Override - public boolean apply( RemoteRepository remoteRepository ) - { - return remoteRepository.getId().equals( id ); - } - } ); - } - - @Override - public ModelResolver newCopy() - { - return new DefaultModelResolver( this ); - } - - @Override - 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 ); - } - - @Override - public ModelSource resolveModel( final Parent parent ) - throws UnresolvableModelException - { - try - { - final Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom", - parent.getVersion() ); - - final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context ); - versionRangeRequest.setTrace( trace ); - - final VersionRangeResult versionRangeResult = - versionRangeResolver.resolveVersionRange( session, versionRangeRequest ); - - if ( versionRangeResult.getHighestVersion() == null ) - { - throw new UnresolvableModelException( - String.format( "No versions matched the requested parent version range '%s'", - parent.getVersion() ), - parent.getGroupId(), parent.getArtifactId(), parent.getVersion() ); - - } - - if ( versionRangeResult.getVersionConstraint() != null - && versionRangeResult.getVersionConstraint().getRange() != null - && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null ) - { - throw new UnresolvableModelException( - String.format( "The requested parent version range '%s' does not specify an upper bound", - parent.getVersion() ), - parent.getGroupId(), parent.getArtifactId(), parent.getVersion() ); - - } - - parent.setVersion( versionRangeResult.getHighestVersion().toString() ); - - return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() ); - } - catch ( final VersionRangeResolutionException e ) - { - throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(), - parent.getVersion(), e ); - - } - } - - @Override - public ModelSource resolveModel( final Dependency dependency ) - throws UnresolvableModelException - { - try - { - final Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), "", - "pom", dependency.getVersion() ); - - final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context ); - versionRangeRequest.setTrace( trace ); - - final VersionRangeResult versionRangeResult = - versionRangeResolver.resolveVersionRange( session, versionRangeRequest ); - - if ( versionRangeResult.getHighestVersion() == null ) - { - throw new UnresolvableModelException( - String.format( "No versions matched the requested dependency version range '%s'", - dependency.getVersion() ), - dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ); - - } - - if ( versionRangeResult.getVersionConstraint() != null - && versionRangeResult.getVersionConstraint().getRange() != null - && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null ) - { - throw new UnresolvableModelException( - String.format( "The requested dependency version range '%s' does not specify an upper bound", - dependency.getVersion() ), - dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ); - - } - - dependency.setVersion( versionRangeResult.getHighestVersion().toString() ); - - return resolveModel( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ); - } - catch ( VersionRangeResolutionException e ) - { - throw new UnresolvableModelException( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), e ); - - } - } -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java deleted file mode 100644 index 8e53c74..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java +++ /dev/null @@ -1,327 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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 org.apache.commons.lang3.Validate; -import org.apache.maven.artifact.repository.metadata.Versioning; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; -import org.eclipse.aether.RepositoryEvent; -import org.eclipse.aether.RepositoryEvent.EventType; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.RequestTrace; -import org.eclipse.aether.SyncContext; -import org.eclipse.aether.impl.MetadataResolver; -import org.eclipse.aether.impl.RepositoryEventDispatcher; -import org.eclipse.aether.impl.SyncContextFactory; -import org.eclipse.aether.impl.VersionRangeResolver; -import org.eclipse.aether.metadata.DefaultMetadata; -import org.eclipse.aether.metadata.Metadata; -import org.eclipse.aether.repository.ArtifactRepository; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.repository.WorkspaceReader; -import org.eclipse.aether.resolution.MetadataRequest; -import org.eclipse.aether.resolution.MetadataResult; -import org.eclipse.aether.resolution.VersionRangeRequest; -import org.eclipse.aether.resolution.VersionRangeResolutionException; -import org.eclipse.aether.resolution.VersionRangeResult; -import org.eclipse.aether.spi.locator.Service; -import org.eclipse.aether.spi.locator.ServiceLocator; -import org.eclipse.aether.spi.log.Logger; -import org.eclipse.aether.spi.log.LoggerFactory; -import org.eclipse.aether.spi.log.NullLoggerFactory; -import org.eclipse.aether.util.version.GenericVersionScheme; -import org.eclipse.aether.version.InvalidVersionSpecificationException; -import org.eclipse.aether.version.Version; -import org.eclipse.aether.version.VersionConstraint; -import org.eclipse.aether.version.VersionScheme; -import org.eclipse.sisu.Nullable; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Benjamin Bentmann - */ -@Named -@Singleton -@Component( role = VersionRangeResolver.class, hint = "default" ) -public class DefaultVersionRangeResolver - implements VersionRangeResolver, Service -{ - - private static final String MAVEN_METADATA_XML = "maven-metadata.xml"; - - @SuppressWarnings( "unused" ) - @Requirement( role = LoggerFactory.class ) - private Logger logger = NullLoggerFactory.LOGGER; - - @Requirement - private MetadataResolver metadataResolver; - - @Requirement - private SyncContextFactory syncContextFactory; - - @Requirement - private RepositoryEventDispatcher repositoryEventDispatcher; - - @Requirement( role = VersionRangeResultFilter.class, optional = true ) - private VersionRangeResultFilter versionRangeResultFilter = new DefaultVersionRangeResultFilter(); - - public DefaultVersionRangeResolver() - { - // enable default constructor - } - - @Inject - DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory, - RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory, - @Nullable VersionRangeResultFilter versionRangeResultFilter ) - { - setMetadataResolver( metadataResolver ); - setSyncContextFactory( syncContextFactory ); - setLoggerFactory( loggerFactory ); - setRepositoryEventDispatcher( repositoryEventDispatcher ); - if ( versionRangeResultFilter != null ) - { - setVersionRangeResultFilter( versionRangeResultFilter ); - } - } - - public void initService( ServiceLocator locator ) - { - setLoggerFactory( locator.getService( LoggerFactory.class ) ); - setMetadataResolver( locator.getService( MetadataResolver.class ) ); - setSyncContextFactory( locator.getService( SyncContextFactory.class ) ); - setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) ); - final VersionRangeResultFilter versionRangeResultFilter = locator.getService( VersionRangeResultFilter.class ); - if ( versionRangeResultFilter != null ) - { - setVersionRangeResultFilter( versionRangeResultFilter ); - } - } - - public DefaultVersionRangeResolver setLoggerFactory( LoggerFactory loggerFactory ) - { - this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() ); - return this; - } - - void setLogger( LoggerFactory loggerFactory ) - { - // plexus support - setLoggerFactory( loggerFactory ); - } - - public DefaultVersionRangeResolver setMetadataResolver( MetadataResolver metadataResolver ) - { - this.metadataResolver = Validate.notNull( metadataResolver, "metadataResolver cannot be null" ); - return this; - } - - public DefaultVersionRangeResolver setSyncContextFactory( SyncContextFactory syncContextFactory ) - { - this.syncContextFactory = Validate.notNull( syncContextFactory, "syncContextFactory cannot be null" ); - return this; - } - - public DefaultVersionRangeResolver setRepositoryEventDispatcher( - RepositoryEventDispatcher repositoryEventDispatcher ) - { - this.repositoryEventDispatcher = Validate.notNull( repositoryEventDispatcher, - "repositoryEventDispatcher cannot be null" ); - return this; - } - - public DefaultVersionRangeResolver setVersionRangeResultFilter( VersionRangeResultFilter versionRangeResultFilter ) - { - this.versionRangeResultFilter = Validate.notNull( versionRangeResultFilter, - "versionRangeResultFilter cannot be null" ); - return this; - } - - public VersionRangeResult resolveVersionRange( RepositorySystemSession session, VersionRangeRequest request ) - throws VersionRangeResolutionException - { - VersionRangeResult result = new VersionRangeResult( request ); - - VersionScheme versionScheme = new GenericVersionScheme(); - - VersionConstraint versionConstraint; - try - { - versionConstraint = versionScheme.parseVersionConstraint( request.getArtifact().getVersion() ); - } - catch ( InvalidVersionSpecificationException e ) - { - result.addException( e ); - throw new VersionRangeResolutionException( result ); - } - - result.setVersionConstraint( versionConstraint ); - - if ( versionConstraint.getRange() == null ) - { - result.addVersion( versionConstraint.getVersion() ); - } - else - { - Map<String, ArtifactRepository> versionIndex = getVersions( session, result, request ); - - List<Version> versions = new ArrayList<>(); - for ( Map.Entry<String, ArtifactRepository> v : versionIndex.entrySet() ) - { - try - { - Version ver = versionScheme.parseVersion( v.getKey() ); - if ( versionConstraint.containsVersion( ver ) ) - { - versions.add( ver ); - result.setRepository( ver, v.getValue() ); - } - } - catch ( InvalidVersionSpecificationException e ) - { - result.addException( e ); - } - } - - Collections.sort( versions ); - result.setVersions( versions ); - } - - return versionRangeResultFilter.filterVersionRangeResult( result ); - } - - private Map<String, ArtifactRepository> getVersions( RepositorySystemSession session, VersionRangeResult result, - VersionRangeRequest request ) - { - RequestTrace trace = RequestTrace.newChild( request.getTrace(), request ); - - Map<String, ArtifactRepository> versionIndex = new HashMap<>(); - - Metadata metadata = - new DefaultMetadata( request.getArtifact().getGroupId(), request.getArtifact().getArtifactId(), - MAVEN_METADATA_XML, Metadata.Nature.RELEASE_OR_SNAPSHOT ); - - List<MetadataRequest> metadataRequests = new ArrayList<>( request.getRepositories().size() ); - - metadataRequests.add( new MetadataRequest( metadata, null, request.getRequestContext() ) ); - - for ( RemoteRepository repository : request.getRepositories() ) - { - MetadataRequest metadataRequest = new MetadataRequest( metadata, repository, request.getRequestContext() ); - metadataRequest.setDeleteLocalCopyIfMissing( true ); - metadataRequest.setTrace( trace ); - metadataRequests.add( metadataRequest ); - } - - List<MetadataResult> metadataResults = metadataResolver.resolveMetadata( session, metadataRequests ); - - WorkspaceReader workspace = session.getWorkspaceReader(); - if ( workspace != null ) - { - List<String> versions = workspace.findVersions( request.getArtifact() ); - for ( String version : versions ) - { - versionIndex.put( version, workspace.getRepository() ); - } - } - - for ( MetadataResult metadataResult : metadataResults ) - { - result.addException( metadataResult.getException() ); - - ArtifactRepository repository = metadataResult.getRequest().getRepository(); - if ( repository == null ) - { - repository = session.getLocalRepository(); - } - - Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result ); - for ( String version : versioning.getVersions() ) - { - if ( !versionIndex.containsKey( version ) ) - { - versionIndex.put( version, repository ); - } - } - } - - return versionIndex; - } - - private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata, - ArtifactRepository repository, VersionRangeResult result ) - { - Versioning versioning = null; - - try - { - if ( metadata != null ) - { - try ( SyncContext syncContext = syncContextFactory.newInstance( session, true ) ) - { - syncContext.acquire( null, Collections.singleton( metadata ) ); - - if ( metadata.getFile() != null && metadata.getFile().exists() ) - { - try ( InputStream in = new FileInputStream( metadata.getFile() ) ) - { - org.apache.maven.artifact.repository.metadata.Metadata m = - new MetadataXpp3Reader().read( in, false ); - - versioning = m.getVersioning(); - } - } - } - } - } - catch ( Exception e ) - { - invalidMetadata( session, trace, metadata, repository, e ); - result.addException( e ); - } - - return ( versioning != null ) ? versioning : new Versioning(); - } - - private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata, - ArtifactRepository repository, Exception exception ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.METADATA_INVALID ); - event.setTrace( trace ); - event.setMetadata( metadata ); - event.setException( exception ); - event.setRepository( repository ); - - repositoryEventDispatcher.dispatch( event.build() ); - } - -} http://git-wip-us.apache.org/repos/asf/maven/blob/58554032/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResultFilter.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResultFilter.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResultFilter.java deleted file mode 100644 index 5ecaf8f..0000000 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResultFilter.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.apache.maven.repository.internal; - -/* - * 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 org.eclipse.aether.resolution.VersionRangeResolutionException; -import org.eclipse.aether.resolution.VersionRangeResult; - -/** - * Non filtering implementation of {@link VersionRangeResultFilter}. - * - * <p> - * This implementation reflects the Apache Maven default version range handling and don't filter anything out of - * {@link VersionRangeResult}. - * </p> - * - * @author barthel - * @since 3.4.0 - */ -public class DefaultVersionRangeResultFilter implements VersionRangeResultFilter -{ - - @Override - public VersionRangeResult filterVersionRangeResult( VersionRangeResult versionRangeResult ) - throws VersionRangeResolutionException - { - return versionRangeResult; - } -}