33import com .cloudbees .sdk .extensibility .Extension ;
44import com .cloudbees .sdk .extensibility .ExtensionModule ;
55import com .google .inject .AbstractModule ;
6+ import com .google .inject .Guice ;
7+ import com .google .inject .Key ;
68import com .google .inject .Provides ;
7- import com .google .inject .name .Names ;
8- import jakarta .inject .Named ;
9- import jakarta .inject .Singleton ;
10- import java .util .Collections ;
11- import java .util .HashSet ;
12- import java .util .Map ;
13- import java .util .Set ;
14- import org .apache .maven .model .building .DefaultModelBuilderFactory ;
15- import org .apache .maven .model .building .ModelBuilder ;
16- import org .apache .maven .repository .internal .DefaultArtifactDescriptorReader ;
17- import org .apache .maven .repository .internal .DefaultModelCacheFactory ;
18- import org .apache .maven .repository .internal .DefaultVersionRangeResolver ;
19- import org .apache .maven .repository .internal .DefaultVersionResolver ;
209import org .apache .maven .repository .internal .MavenRepositorySystemUtils ;
21- import org .apache .maven .repository .internal .ModelCacheFactory ;
22- import org .apache .maven .repository .internal .SnapshotMetadataGeneratorFactory ;
23- import org .apache .maven .repository .internal .VersionsMetadataGeneratorFactory ;
2410import org .eclipse .aether .DefaultRepositorySystemSession ;
2511import org .eclipse .aether .RepositorySystem ;
2612import org .eclipse .aether .RepositorySystemSession ;
27- import org .eclipse .aether .connector .basic .BasicRepositoryConnectorFactory ;
28- import org .eclipse .aether .impl .ArtifactDescriptorReader ;
29- import org .eclipse .aether .impl .MetadataGeneratorFactory ;
30- import org .eclipse .aether .impl .VersionRangeResolver ;
31- import org .eclipse .aether .impl .VersionResolver ;
3213import org .eclipse .aether .repository .LocalRepository ;
33- import org .eclipse .aether .spi .connector .RepositoryConnectorFactory ;
34- import org .eclipse .aether .spi .connector .transport .TransporterFactory ;
3514import org .eclipse .aether .transfer .TransferEvent ;
36- import org .eclipse .aether .transport .file .FileTransporterFactory ;
37- import org .eclipse .aether .transport .http .ChecksumExtractor ;
38- import org .eclipse .aether .transport .http .HttpTransporterFactory ;
15+ import org .eclipse .sisu .inject .BeanLocator ;
16+ import org .eclipse .sisu .inject .MutableBeanLocator ;
17+ import org .eclipse .sisu .launch .SisuExtensions ;
18+ import org .eclipse .sisu .space .BeanScanning ;
19+ import org .eclipse .sisu .space .ClassSpace ;
20+ import org .eclipse .sisu .space .SpaceModule ;
21+ import org .eclipse .sisu .space .URLClassSpace ;
22+ import org .eclipse .sisu .wire .WireModule ;
3923import org .jenkinsci .test .acceptance .utils .MavenLocalRepository ;
4024
4125/**
4226 * Hook up Aether resolver.
4327 * <p>
4428 * To resolve components, inject {@link RepositorySystem} and {@link RepositorySystemSession}.
45- * <p>
46- * Here, we assemble a complete module by using {@link org.eclipse.aether.impl.guice.AetherModule} (see its Javadoc)
47- * and adding bits from Maven itself (binding those components that complete the repository system).
4829 *
4930 * @author Kohsuke Kawaguchi
5031 */
5132@ Extension
5233public class AetherModule extends AbstractModule implements ExtensionModule {
53- @ Override
54- protected void configure () {
55- // NOTE: see org.eclipse.aether.impl.guice.AetherModule Javadoc:
56- // org.eclipse.aether.impl.guice.AetherModule alone is "ready-made" but incomplete.
57- // To have a complete resolver, we actually need to bind the missing components making the module complete.
58- install (new org .eclipse .aether .impl .guice .AetherModule ());
5934
60- // make module "complete" by binding things not bound by org.eclipse.aether.impl.guice.AetherModule
61- bind (ArtifactDescriptorReader .class )
62- .to (DefaultArtifactDescriptorReader .class )
63- .in (Singleton .class );
64- bind (VersionResolver .class ).to (DefaultVersionResolver .class ).in (Singleton .class );
65- bind (VersionRangeResolver .class ).to (DefaultVersionRangeResolver .class ).in (Singleton .class );
66- bind (MetadataGeneratorFactory .class )
67- .annotatedWith (Names .named ("snapshot" ))
68- .to (SnapshotMetadataGeneratorFactory .class )
69- .in (Singleton .class );
35+ private RepositorySystem repositorySystem ;
7036
71- bind (MetadataGeneratorFactory .class )
72- .annotatedWith (Names .named ("versions" ))
73- .to (VersionsMetadataGeneratorFactory .class )
74- .in (Singleton .class );
37+ @ Override
38+ protected void configure () {
39+ ClassSpace space = new URLClassSpace (RepositorySystem .class .getClassLoader ());
40+ BeanLocator beanLocator = Guice .createInjector (new WireModule (new SpaceModule (space , BeanScanning .INDEX , false ))
41+ .with (SisuExtensions .local (space )))
42+ .getInstance (MutableBeanLocator .class );
43+ repositorySystem = beanLocator
44+ .locate (Key .get (RepositorySystem .class ))
45+ .iterator ()
46+ .next ()
47+ .getValue ();
48+ }
7549
76- bind (RepositoryConnectorFactory .class )
77- .annotatedWith (Names .named ("basic" ))
78- .to (BasicRepositoryConnectorFactory .class );
79- bind (TransporterFactory .class ).annotatedWith (Names .named ("file" )).to (FileTransporterFactory .class );
80- bind (TransporterFactory .class ).annotatedWith (Names .named ("http" )).to (HttpTransporterFactory .class );
50+ @ Provides
51+ public RepositorySystem newRepositorySystem () {
52+ return repositorySystem ;
8153 }
8254
8355 @ Provides
@@ -100,65 +72,4 @@ public void transferProgressed(TransferEvent event) {
10072
10173 return session ;
10274 }
103-
104- /**
105- * Checksum extractors (none).
106- */
107- @ Provides
108- @ Singleton
109- Map <String , ChecksumExtractor > provideChecksumExtractors () {
110- return Collections .emptyMap ();
111- }
112-
113- /**
114- * Repository system connectors (needed for remote transport).
115- */
116- @ Provides
117- @ Singleton
118- Set <RepositoryConnectorFactory > provideRepositoryConnectorFactories (
119- @ Named ("basic" ) RepositoryConnectorFactory basic ) {
120- Set <RepositoryConnectorFactory > factories = new HashSet <>();
121- factories .add (basic );
122- return Collections .unmodifiableSet (factories );
123- }
124-
125- /**
126- * Repository system transporters (needed for remote transport).
127- */
128- @ Provides
129- @ Singleton
130- Set <TransporterFactory > provideTransporterFactories (
131- @ Named ("file" ) TransporterFactory file , @ Named ("http" ) TransporterFactory http ) {
132- Set <TransporterFactory > factories = new HashSet <>();
133- factories .add (file );
134- factories .add (http );
135- return Collections .unmodifiableSet (factories );
136- }
137-
138- /**
139- * Repository metadata generators (needed for remote transport).
140- */
141- @ Provides
142- @ Singleton
143- Set <MetadataGeneratorFactory > provideMetadataGeneratorFactories (
144- @ Named ("snapshot" ) MetadataGeneratorFactory snapshot ,
145- @ Named ("versions" ) MetadataGeneratorFactory versions ) {
146- Set <MetadataGeneratorFactory > factories = new HashSet <>(2 );
147- factories .add (snapshot );
148- factories .add (versions );
149- return Collections .unmodifiableSet (factories );
150- }
151-
152- /**
153- * Simple instance provider for model builder factory.
154- */
155- @ Provides
156- ModelBuilder provideModelBuilder () {
157- return new DefaultModelBuilderFactory ().newInstance ();
158- }
159-
160- @ Provides
161- ModelCacheFactory provideModelCacheFactory () {
162- return new DefaultModelCacheFactory ();
163- }
16475}
0 commit comments