This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch use-sisu in repository https://gitbox.apache.org/repos/asf/maven-resolver-ant-tasks.git
commit f9cf6b2078a55152c3a3848b86a96b6e96cd153d Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Fri May 21 11:47:53 2021 +0200 Make it use Guice for now but still somethign is fishy here --- pom.xml | 5 - .../maven/resolver/internal/ant/AntRepoSys.java | 6 -- .../internal/ant/guice/AntTasksModule.java | 26 ++--- .../internal/ant/guice/MavenResolverModule.java | 110 +++++++++++++++++++++ 4 files changed, 117 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index a48ae6f..e886743 100644 --- a/pom.xml +++ b/pom.xml @@ -184,11 +184,6 @@ </dependency> <dependency> <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-component-annotations</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-interpolation</artifactId> <version>1.25</version> </dependency> diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java b/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java index d4acf14..9b7800d 100644 --- a/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java +++ b/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java @@ -36,11 +36,8 @@ import java.util.Map; import java.util.Properties; import java.util.concurrent.CopyOnWriteArrayList; -import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.name.Named; import org.apache.maven.model.Model; import org.apache.maven.model.building.DefaultModelBuilderFactory; import org.apache.maven.model.building.DefaultModelBuildingRequest; @@ -97,7 +94,6 @@ import org.eclipse.aether.deployment.DeploymentException; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.installation.InstallRequest; import org.eclipse.aether.installation.InstallationException; -import org.eclipse.aether.internal.impl.DefaultRepositorySystem; import org.eclipse.aether.repository.AuthenticationSelector; import org.eclipse.aether.repository.LocalRepositoryManager; import org.eclipse.aether.repository.MirrorSelector; @@ -107,7 +103,6 @@ import org.eclipse.aether.util.repository.ConservativeAuthenticationSelector; import org.eclipse.aether.util.repository.DefaultAuthenticationSelector; import org.eclipse.aether.util.repository.DefaultMirrorSelector; import org.eclipse.aether.util.repository.DefaultProxySelector; -import org.eclipse.sisu.bean.LifecycleModule; import org.eclipse.sisu.launch.Main; import org.eclipse.sisu.space.BeanScanning; @@ -170,7 +165,6 @@ public class AntRepoSys { this.project = project; - System.setProperty("sisu.debug", "true"); this.injector = Guice.createInjector( Main.wire( BeanScanning.INDEX, diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/guice/AntTasksModule.java b/src/main/java/org/apache/maven/resolver/internal/ant/guice/AntTasksModule.java index b2d48ba..c3ae5bc 100644 --- a/src/main/java/org/apache/maven/resolver/internal/ant/guice/AntTasksModule.java +++ b/src/main/java/org/apache/maven/resolver/internal/ant/guice/AntTasksModule.java @@ -19,36 +19,17 @@ package org.apache.maven.resolver.internal.ant.guice; * under the License. */ -import java.util.Collections; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; -import javax.inject.Singleton; -import com.google.inject.AbstractModule; import com.google.inject.Binder; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Provides; -import com.google.inject.name.Names; import org.apache.maven.model.building.DefaultModelBuilderFactory; import org.apache.maven.model.building.ModelBuilder; -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.apache.tools.ant.Project; -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; -import org.eclipse.sisu.Parameters; import org.eclipse.sisu.bean.LifecycleModule; import org.eclipse.sisu.inject.MutableBeanLocator; import org.eclipse.sisu.wire.ParameterKeys; @@ -73,12 +54,19 @@ public final class AntTasksModule public void configure( final Binder binder ) { binder.install( new LifecycleModule() ); + binder.install( new MavenResolverModule() ); binder.bind( ParameterKeys.PROPERTIES ).toInstance( properties ); binder.bind( ShutdownThread.class ).asEagerSingleton(); binder.bind( Key.get( Project.class ) ).toInstance( project ); } + @Provides + ModelBuilder provideModelBuilder() + { + return new DefaultModelBuilderFactory().newInstance(); + } + static final class ShutdownThread extends Thread { diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/guice/MavenResolverModule.java b/src/main/java/org/apache/maven/resolver/internal/ant/guice/MavenResolverModule.java new file mode 100644 index 0000000..e96d681 --- /dev/null +++ b/src/main/java/org/apache/maven/resolver/internal/ant/guice/MavenResolverModule.java @@ -0,0 +1,110 @@ +package org.apache.maven.resolver.internal.ant.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.connector.basic.BasicRepositoryConnectorFactory; +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; +import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; +import org.eclipse.aether.spi.connector.transport.TransporterFactory; +import org.eclipse.aether.transport.file.FileTransporterFactory; +import org.eclipse.aether.transport.http.HttpTransporterFactory; + +/** + * 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() ); + + bind( RepositoryConnectorFactory.class ).annotatedWith( Names.named( "basic" ) ) + .to( BasicRepositoryConnectorFactory.class ); + bind( TransporterFactory.class ).annotatedWith( Names.named( "file" ) ).to( FileTransporterFactory.class ); + bind( TransporterFactory.class ).annotatedWith( Names.named( "http" ) ).to( HttpTransporterFactory.class ); + } + + @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 ); + } + + @Provides + @Singleton + Set<RepositoryConnectorFactory> provideRepositoryConnectorFactories( + @Named( "basic" ) RepositoryConnectorFactory basic ) + { + Set<RepositoryConnectorFactory> factories = new HashSet<>(); + factories.add( basic ); + return Collections.unmodifiableSet( factories ); + } + + @Provides + @Singleton + Set<TransporterFactory> provideTransporterFactories( @Named( "file" ) TransporterFactory file, + @Named( "http" ) TransporterFactory http ) + { + Set<TransporterFactory> factories = new HashSet<>(); + factories.add( file ); + factories.add( http ); + return Collections.unmodifiableSet( factories ); + } +}