You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/05/21 09:48:40 UTC

[maven-resolver-ant-tasks] 01/01: Make it use Guice for now but still somethign is fishy here

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 );
+    }
+}