This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


The following commit(s) were added to refs/heads/master by this push:
     new 95ad3ca  [MRESOLVER-174] Use all bindings in UTs and tests
95ad3ca is described below

commit 95ad3ca4b6f2380999ca6b7e312f4f31aff45c83
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Apr 27 10:47:21 2021 +0200

    [MRESOLVER-174] Use all bindings in UTs and tests
    
    Demo snippets did run all "demos" but using SL only,
    now it runs with SL, guice, sisu.
    
    This closes #99
---
 .../maven-resolver-demo-snippets/pom.xml           |  2 +-
 .../maven/resolver/examples/DeployArtifacts.java   |  2 +-
 .../resolver/examples/FindAvailableVersions.java   |  2 +-
 .../maven/resolver/examples/FindNewestVersion.java |  2 +-
 .../resolver/examples/GetDependencyHierarchy.java  |  2 +-
 .../maven/resolver/examples/GetDependencyTree.java |  2 +-
 .../resolver/examples/GetDirectDependencies.java   |  2 +-
 .../maven/resolver/examples/InstallArtifacts.java  |  2 +-
 .../maven/resolver/examples/ResolveArtifact.java   |  2 +-
 .../examples/ResolveTransitiveDependencies.java    |  2 +-
 .../examples/guice/DemoResolverModule.java         |  7 ++
 .../maven/resolver/examples/resolver/Resolver.java |  4 +-
 .../resolver/examples/resolver/ResolverDemo.java   | 12 ++--
 .../resolver/examples/sisu/MavenDemoModule.java    | 77 ++++++++++++++++++++++
 .../sisu/SisuRepositorySystemDemoModule.java       | 69 +++++++++++++++++++
 .../examples/sisu/SisuRepositorySystemFactory.java | 11 +++-
 .../maven/resolver/examples/util/Booter.java       | 33 ++++++++--
 .../resolver/examples/AllResolverDemosTest.java    | 19 ++++--
 .../eclipse/aether/impl/DefaultServiceLocator.java |  3 +-
 .../eclipse/aether/impl/guice/AetherModule.java    |  8 ++-
 .../synccontext/DefaultSyncContextFactory.java     |  2 +-
 .../legacy/DefaultSyncContextFactory.java          | 71 ++++++++++++++++++++
 22 files changed, 306 insertions(+), 30 deletions(-)

diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml 
b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
index 5c5ae1f..6495919 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
@@ -38,7 +38,7 @@
 
   <properties>
     
<Automatic-Module-Name>org.apache.maven.resolver.demo.snippets</Automatic-Module-Name>
-    <mavenVersion>3.5.0</mavenVersion>
+    <mavenVersion>3.5.4</mavenVersion>
   </properties>
 
   <dependencyManagement>
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/DeployArtifacts.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/DeployArtifacts.java
index 18bd3de..4596cee 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/DeployArtifacts.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/DeployArtifacts.java
@@ -47,7 +47,7 @@ public class DeployArtifacts
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( DeployArtifacts.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindAvailableVersions.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindAvailableVersions.java
index 5a27914..61a2338 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindAvailableVersions.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindAvailableVersions.java
@@ -47,7 +47,7 @@ public class FindAvailableVersions
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( FindAvailableVersions.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindNewestVersion.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindNewestVersion.java
index 7ab642a..099e65a 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindNewestVersion.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/FindNewestVersion.java
@@ -44,7 +44,7 @@ public class FindNewestVersion
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( FindNewestVersion.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyHierarchy.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyHierarchy.java
index b802924..526ddb1 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyHierarchy.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyHierarchy.java
@@ -49,7 +49,7 @@ public class GetDependencyHierarchy
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( GetDependencyHierarchy.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         DefaultRepositorySystemSession session = 
Booter.newRepositorySystemSession( system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyTree.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyTree.java
index 0f4444c..78af783 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyTree.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDependencyTree.java
@@ -46,7 +46,7 @@ public class GetDependencyTree
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( GetDependencyTree.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDirectDependencies.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDirectDependencies.java
index 83d4b30..e6042b3 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDirectDependencies.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/GetDirectDependencies.java
@@ -45,7 +45,7 @@ public class GetDirectDependencies
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( GetDirectDependencies.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/InstallArtifacts.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/InstallArtifacts.java
index 7e006f6..98fbb92 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/InstallArtifacts.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/InstallArtifacts.java
@@ -46,7 +46,7 @@ public class InstallArtifacts
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( InstallArtifacts.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveArtifact.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveArtifact.java
index 6587bf1..f46c843 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveArtifact.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveArtifact.java
@@ -44,7 +44,7 @@ public class ResolveArtifact
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( ResolveArtifact.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java
index 9e4ac5c..88ee3ec 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java
@@ -51,7 +51,7 @@ public class ResolveTransitiveDependencies
         System.out.println( 
"------------------------------------------------------------" );
         System.out.println( 
ResolveTransitiveDependencies.class.getSimpleName() );
 
-        RepositorySystem system = Booter.newRepositorySystem();
+        RepositorySystem system = Booter.newRepositorySystem( 
Booter.selectFactory( args ) );
 
         RepositorySystemSession session = Booter.newRepositorySystemSession( 
system );
 
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 e3b52c8..16ee292 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
@@ -37,6 +37,9 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.name.Names;
 
+/**
+ * Guice module for Demo Resolver snippets.
+ */
 class DemoResolverModule
     extends AbstractModule
 {
@@ -44,6 +47,10 @@ class DemoResolverModule
     @Override
     protected void configure()
     {
+        // NOTE: see org.eclipse.aether.impl.guice.AetherModule Javadoc:
+        // AetherModule alone is "ready-made" but incomplete. To have a 
complete resolver, we
+        // actually need 
org.apache.maven.repository.internal.MavenResolverModule that installs
+        // AetherModule and binds the missing components making module 
complete.
         install( new MavenResolverModule() );
         // alternatively, use the Guice Multibindings extensions
         bind( RepositoryConnectorFactory.class ).annotatedWith( Names.named( 
"basic" ) )
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/Resolver.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/Resolver.java
index ae07a4c..42193b7 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/Resolver.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/Resolver.java
@@ -54,10 +54,10 @@ public class Resolver
 
     private LocalRepository localRepository;
 
-    public Resolver( String remoteRepository, String localRepository )
+    public Resolver( String factory, String remoteRepository, String 
localRepository )
     {
         this.remoteRepository = remoteRepository;
-        this.repositorySystem = Booter.newRepositorySystem();
+        this.repositorySystem = Booter.newRepositorySystem( factory );
         this.localRepository = new LocalRepository( localRepository );
     }
 
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/ResolverDemo.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/ResolverDemo.java
index 670dd1d..e3a4ebc 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/ResolverDemo.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/resolver/ResolverDemo.java
@@ -36,10 +36,12 @@ import org.eclipse.aether.util.artifact.SubArtifact;
 public class ResolverDemo
 {
 
-    public void resolve() 
+    public void resolve( final String factory )
         throws DependencyResolutionException
     {
-        Resolver resolver = new Resolver( 
"http://localhost:8081/nexus/content/groups/public";, "target/aether-repo" );
+        Resolver resolver = new Resolver(
+            factory,
+            "http://localhost:8081/nexus/content/groups/public";, 
"target/aether-repo" );
                 
         ResolverResult result = resolver.resolve( "com.mycompany.app", 
"super-app", "1.0" );
 
@@ -56,10 +58,12 @@ public class ResolverDemo
         String classpath = result.getResolvedClassPath();        
     }
     
-    public void installAndDeploy() 
+    public void installAndDeploy( final String factory )
         throws InstallationException, DeploymentException
     {
-        Resolver resolver = new Resolver( 
"http://localhost:8081/nexus/content/groups/public";, "target/aether-repo" );
+        Resolver resolver = new Resolver(
+            factory,
+            "http://localhost:8081/nexus/content/groups/public";, 
"target/aether-repo" );
         
         Artifact artifact = new DefaultArtifact( "com.mycompany.super", 
"super-core", "jar", "0.1-SNAPSHOT" );
         artifact = artifact.setFile( new File( "jar-from-whatever-process.jar" 
) );
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/MavenDemoModule.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/MavenDemoModule.java
new file mode 100644
index 0000000..43f3044
--- /dev/null
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/MavenDemoModule.java
@@ -0,0 +1,77 @@
+package org.apache.maven.resolver.examples.sisu;
+
+/*
+ * 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.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.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+
+/**
+ * Module with component implementations found in Maven's 
maven-resolver-provider and maven-model-builder. This module
+ * binds ONLY components found OUTSIDE resolver.
+ */
+public class MavenDemoModule
+    extends AbstractModule
+{
+    protected void configure()
+    {
+        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 );
+    }
+}
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemDemoModule.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemDemoModule.java
new file mode 100644
index 0000000..ad1178a
--- /dev/null
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemDemoModule.java
@@ -0,0 +1,69 @@
+package org.apache.maven.resolver.examples.sisu;
+
+/*
+ * 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 javax.inject.Inject;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import org.eclipse.sisu.bean.LifecycleModule;
+import org.eclipse.sisu.inject.MutableBeanLocator;
+import org.eclipse.sisu.wire.ParameterKeys;
+
+/**
+ * Sisu module for demo snippets.
+ */
+public class SisuRepositorySystemDemoModule implements Module
+{
+    @Override
+    public void configure( final Binder binder )
+    {
+        binder.install( new LifecycleModule() );
+        // NOTE: this module below is needed due following: while 
maven-resolver-provider:3.5.4 DOES have Sisu index,
+        // the also needed module maven-model-builder:3.5.4 DOES NOT have Sisu 
index (has plexus/components.xml).
+        // To keep things simple, and not bring in deprecated Plexus, we 
rather install custom Guicemodule
+        // (MavenDemoModule) to provide the "missing components" (while 
resolver components are discovered by Sisu)
+        // making resolver complete.
+        // To demo Sisu, resolver is completed with components discovered by 
Sisu (using Sisu index, that all
+        // resolver modules have), and the handful components registered 
directly to Guice in MavenDemoModule module.
+        binder.install( new MavenDemoModule() );
+        binder.bind( ParameterKeys.PROPERTIES ).toInstance( 
System.getProperties() );
+        binder.bind( ShutdownThread.class ).asEagerSingleton();
+    }
+
+    static final class ShutdownThread
+        extends Thread
+    {
+        private final MutableBeanLocator locator;
+
+        @Inject
+        ShutdownThread( final MutableBeanLocator locator )
+        {
+            this.locator = locator;
+            Runtime.getRuntime().addShutdownHook( this );
+        }
+
+        @Override
+        public void run()
+        {
+            locator.clear();
+        }
+    }
+}
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemFactory.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemFactory.java
index 4373dab..721d4a5 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemFactory.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/sisu/SisuRepositorySystemFactory.java
@@ -23,10 +23,14 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Provider;
 
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
 import org.apache.maven.model.building.DefaultModelBuilderFactory;
 import org.apache.maven.model.building.ModelBuilder;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.sisu.launch.Main;
+import org.eclipse.sisu.space.BeanScanning;
 
 /**
  * A factory for repository system instances that employs Eclipse Sisu to wire 
up the system's components.
@@ -40,7 +44,12 @@ public class SisuRepositorySystemFactory
 
     public static RepositorySystem newRepositorySystem()
     {
-        return Main.boot( SisuRepositorySystemFactory.class ).repositorySystem;
+        final Module app = Main.wire(
+            BeanScanning.INDEX,
+            new SisuRepositorySystemDemoModule()
+        );
+        final Injector injector = Guice.createInjector( app );
+        return injector.getInstance( SisuRepositorySystemFactory.class 
).repositorySystem;
     }
 
     @Named
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/Booter.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/Booter.java
index 01ace9a..399f2f9 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/Booter.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/Booter.java
@@ -35,12 +35,37 @@ import org.eclipse.aether.repository.RemoteRepository;
  */
 public class Booter
 {
+    public static final String SERVICE_LOCATOR = "serviceLocator";
 
-    public static RepositorySystem newRepositorySystem()
+    public static final String GUICE = "guice";
+
+    public static final String SISU = "sisu";
+
+    public static String selectFactory( String[] args )
+    {
+        if ( args == null || args.length == 0 )
+        {
+            return SERVICE_LOCATOR;
+        }
+        else
+        {
+            return args[0];
+        }
+    }
+
+    public static RepositorySystem newRepositorySystem( final String factory )
     {
-        return 
org.apache.maven.resolver.examples.manual.ManualRepositorySystemFactory.newRepositorySystem();
-        // return 
org.apache.maven.resolver.examples.guice.GuiceRepositorySystemFactory.newRepositorySystem();
-        // return 
org.apache.maven.resolver.examples.sisu.SisuRepositorySystemFactory.newRepositorySystem();
+        switch ( factory ) 
+        {
+            case SERVICE_LOCATOR:
+                return 
org.apache.maven.resolver.examples.manual.ManualRepositorySystemFactory.newRepositorySystem();
+            case GUICE:
+                return 
org.apache.maven.resolver.examples.guice.GuiceRepositorySystemFactory.newRepositorySystem();
+            case SISU:
+                return 
org.apache.maven.resolver.examples.sisu.SisuRepositorySystemFactory.newRepositorySystem();
+            default:
+                throw new IllegalArgumentException( "Unknown factory: " + 
factory );
+        }
     }
 
     public static DefaultRepositorySystemSession newRepositorySystemSession( 
RepositorySystem system )
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/test/java/org/apache/maven/resolver/examples/AllResolverDemosTest.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/test/java/org/apache/maven/resolver/examples/AllResolverDemosTest.java
index 78f384e..f4a25fe 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/test/java/org/apache/maven/resolver/examples/AllResolverDemosTest.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/test/java/org/apache/maven/resolver/examples/AllResolverDemosTest.java
@@ -8,9 +8,9 @@ package org.apache.maven.resolver.examples;
  * 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
@@ -19,6 +19,7 @@ package org.apache.maven.resolver.examples;
  * under the License.
  */
 
+import org.apache.maven.resolver.examples.util.Booter;
 import org.junit.Test;
 
 /**
@@ -27,7 +28,17 @@ import org.junit.Test;
 public class AllResolverDemosTest
 {
     @Test
-    public void runMain() throws Exception {
-        AllResolverDemos.main( new String[0] );
+    public void serviceLocator() throws Exception {
+        AllResolverDemos.main( new String[] {Booter.SERVICE_LOCATOR} );
+    }
+
+    @Test
+    public void guice() throws Exception {
+        AllResolverDemos.main( new String[] {Booter.GUICE} );
+    }
+
+    @Test
+    public void sisu() throws Exception {
+        AllResolverDemos.main( new String[] {Booter.SISU} );
     }
 }
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
index d838d76..fa72590 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
@@ -211,7 +211,8 @@ public final class DefaultServiceLocator
         addService( UpdateCheckManager.class, DefaultUpdateCheckManager.class 
);
         addService( UpdatePolicyAnalyzer.class, 
DefaultUpdatePolicyAnalyzer.class );
         addService( FileProcessor.class, DefaultFileProcessor.class );
-        addService( org.eclipse.aether.impl.SyncContextFactory.class, 
DefaultSyncContextFactory.class );
+        addService( org.eclipse.aether.impl.SyncContextFactory.class,
+            
org.eclipse.aether.internal.impl.synccontext.legacy.DefaultSyncContextFactory.class
 );
         addService( SyncContextFactory.class, DefaultSyncContextFactory.class 
);
         addService( RepositoryEventDispatcher.class, 
DefaultRepositoryEventDispatcher.class );
         addService( OfflineController.class, DefaultOfflineController.class );
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
index 0c9f6a5..0ac8245 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
@@ -54,7 +54,6 @@ import 
org.eclipse.aether.internal.impl.synccontext.named.StaticNameMapper;
 import org.eclipse.aether.named.NamedLockFactory;
 import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory;
 import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory;
-import org.eclipse.aether.spi.synccontext.SyncContextFactory;
 import org.eclipse.aether.impl.UpdateCheckManager;
 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
 import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
@@ -85,6 +84,7 @@ import 
org.eclipse.aether.spi.connector.transport.TransporterProvider;
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
 import org.eclipse.aether.spi.log.LoggerFactory;
+import org.eclipse.aether.spi.synccontext.SyncContextFactory;
 import org.slf4j.ILoggerFactory;
 
 import com.google.inject.AbstractModule;
@@ -148,8 +148,6 @@ public class AetherModule
         .to( DefaultUpdatePolicyAnalyzer.class ).in( Singleton.class );
         bind( FileProcessor.class ) //
         .to( DefaultFileProcessor.class ).in( Singleton.class );
-        bind( SyncContextFactory.class ) //
-        .to( DefaultSyncContextFactory.class ).in( Singleton.class );
         bind( RepositoryEventDispatcher.class ) //
         .to( DefaultRepositoryEventDispatcher.class ).in( Singleton.class );
         bind( OfflineController.class ) //
@@ -162,6 +160,10 @@ public class AetherModule
         .to( EnhancedLocalRepositoryManagerFactory.class ).in( Singleton.class 
);
         bind( TrackingFileManager.class ).to( DefaultTrackingFileManager.class 
).in( Singleton.class );
 
+        bind( SyncContextFactory.class ).to( DefaultSyncContextFactory.class 
).in( Singleton.class );
+        bind( org.eclipse.aether.impl.SyncContextFactory.class )
+                .to( 
org.eclipse.aether.internal.impl.synccontext.legacy.DefaultSyncContextFactory.class
 )
+                .in( Singleton.class );
         bind( SyncContextFactoryDelegate.class ).annotatedWith( Names.named( 
NoLockSyncContextFactory.NAME ) )
                 .to( NoLockSyncContextFactory.class ).in( Singleton.class );
         bind( SyncContextFactoryDelegate.class ).annotatedWith( Names.named( 
GlobalSyncContextFactory.NAME ) )
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/DefaultSyncContextFactory.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/DefaultSyncContextFactory.java
index f100b7b..894d9ca 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/DefaultSyncContextFactory.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/DefaultSyncContextFactory.java
@@ -37,7 +37,7 @@ import java.util.Objects;
 @Singleton
 @Named
 public final class DefaultSyncContextFactory
-        implements SyncContextFactory, 
org.eclipse.aether.impl.SyncContextFactory
+        implements SyncContextFactory
 {
     private static final String SYNC_CONTEXT_FACTORY_NAME = System.getProperty(
             "aether.syncContext.impl", NamedSyncContextFactory.NAME
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/legacy/DefaultSyncContextFactory.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/legacy/DefaultSyncContextFactory.java
new file mode 100644
index 0000000..7925ac6
--- /dev/null
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/legacy/DefaultSyncContextFactory.java
@@ -0,0 +1,71 @@
+package org.eclipse.aether.internal.impl.synccontext.legacy;
+
+/*
+ * 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.Objects;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.SyncContext;
+import org.eclipse.aether.spi.locator.Service;
+import org.eclipse.aether.spi.locator.ServiceLocator;
+import org.eclipse.aether.spi.synccontext.SyncContextFactory;
+
+/**
+ * Deprecated {@link org.eclipse.aether.impl.SyncContextFactory} 
implementation that delegates to proper
+ * {@link SyncContextFactory} implementation. Used in Guice/SISU where we 
cannot bind same instance to two keys,
+ * this component "bridges" from deprecated to current.
+ *
+ * @deprecated Use the proper class from SPI module.
+ */
+@Singleton
+@Named
+@Deprecated
+public final class DefaultSyncContextFactory
+        implements org.eclipse.aether.impl.SyncContextFactory, Service
+{
+    private SyncContextFactory delegate;
+
+    public DefaultSyncContextFactory()
+    {
+        // default ctor for ServiceLocator
+    }
+
+    @Inject
+    public DefaultSyncContextFactory( final SyncContextFactory delegate )
+    {
+        this.delegate = Objects.requireNonNull( delegate );
+    }
+
+    @Override
+    public void initService( final ServiceLocator locator )
+    {
+        this.delegate = Objects.requireNonNull( locator.getService( 
SyncContextFactory.class ) );
+    }
+
+    @Override
+    public SyncContext newInstance( final RepositorySystemSession session, 
final boolean shared )
+    {
+        return delegate.newInstance( session, shared );
+    }
+}

Reply via email to