This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch update-maven-in-demos in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/update-maven-in-demos by this push: new e11f7fb Fix guice integration e11f7fb is described below commit e11f7fbc96729c5c8791937aa2755b2ef5e5af56 Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Fri May 21 11:18:13 2021 +0200 Fix guice integration --- .../examples/guice/DemoResolverModule.java | 7 +- .../examples/guice/MavenResolverModule.java | 80 ++++++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/DemoResolverModule.java b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/DemoResolverModule.java index 0326f9f..f8e8d5a 100644 --- a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/DemoResolverModule.java +++ b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/DemoResolverModule.java @@ -28,7 +28,6 @@ import javax.inject.Singleton; import org.apache.maven.model.building.DefaultModelBuilderFactory; import org.apache.maven.model.building.ModelBuilder; -import org.apache.maven.repository.internal.MavenResolverModule; import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory; import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; import org.eclipse.aether.spi.connector.transport.TransporterFactory; @@ -59,7 +58,6 @@ class DemoResolverModule .to( BasicRepositoryConnectorFactory.class ); bind( TransporterFactory.class ).annotatedWith( Names.named( "file" ) ).to( FileTransporterFactory.class ); bind( TransporterFactory.class ).annotatedWith( Names.named( "http" ) ).to( HttpTransporterFactory.class ); - bind( ModelBuilder.class ).toProvider( () -> new DefaultModelBuilderFactory().newInstance() ); } @Provides @@ -82,4 +80,9 @@ class DemoResolverModule factories.add( http ); return Collections.unmodifiableSet( factories ); } + + @Provides + ModelBuilder provideModelBuilder() { + return new DefaultModelBuilderFactory().newInstance(); + } } diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/MavenResolverModule.java b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/MavenResolverModule.java new file mode 100644 index 0000000..9f46c75 --- /dev/null +++ b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/guice/MavenResolverModule.java @@ -0,0 +1,80 @@ +package org.apache.maven.resolver.examples.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.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.inject.Named; +import javax.inject.Singleton; + +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.name.Names; +import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader; +import org.apache.maven.repository.internal.DefaultVersionRangeResolver; +import org.apache.maven.repository.internal.DefaultVersionResolver; +import org.apache.maven.repository.internal.SnapshotMetadataGeneratorFactory; +import org.apache.maven.repository.internal.VersionsMetadataGeneratorFactory; +import org.eclipse.aether.impl.ArtifactDescriptorReader; +import org.eclipse.aether.impl.MetadataGeneratorFactory; +import org.eclipse.aether.impl.VersionRangeResolver; +import org.eclipse.aether.impl.VersionResolver; +import org.eclipse.aether.impl.guice.AetherModule; + +/** + * MavenResolverModule. Note: copy of the same class from org.apache.maven:maven-resolver-provider as there is an + * issue: binding to ModelBuilder makes guice attempt to inject maven-specific things into it as well, that + * fails. Here, for demo purposes, we provide manually crafted instances of ModelBuilder instead. + */ +public final class MavenResolverModule + extends AbstractModule +{ + + @Override + protected void configure() + { + install( new AetherModule() ); + bind( ArtifactDescriptorReader.class ).to( DefaultArtifactDescriptorReader.class ).in( Singleton.class ); + bind( VersionResolver.class ).to( DefaultVersionResolver.class ).in( Singleton.class ); + bind( VersionRangeResolver.class ).to( DefaultVersionRangeResolver.class ).in( Singleton.class ); + bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "snapshot" ) ) + .to( SnapshotMetadataGeneratorFactory.class ).in( Singleton.class ); + + bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) ) + .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class ); + + // bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() ); + } + + @Provides + @Singleton + Set<MetadataGeneratorFactory> provideMetadataGeneratorFactories( + @Named( "snapshot" ) MetadataGeneratorFactory snapshot, + @Named( "versions" ) MetadataGeneratorFactory versions ) + { + Set<MetadataGeneratorFactory> factories = new HashSet<>( 2 ); + factories.add( snapshot ); + factories.add( versions ); + return Collections.unmodifiableSet( factories ); + } + +}