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