Skip to content

Commit 60e25a7

Browse files
cstamasbasil
andauthored
Migrate from deprecated org.eclipse.aether.impl.guice.AetherModule to Sisu (#1733)
Co-authored-by: Basil Crow <me@basilcrow.com>
1 parent bd93727 commit 60e25a7

3 files changed

Lines changed: 70 additions & 116 deletions

File tree

.github/renovate.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@
1313
"ignoreDeps": [
1414
"org.apache.maven:maven-resolver-provider",
1515
"org.apache.maven:maven-settings-builder",
16+
"org.apache.maven.resolver:maven-resolver-api",
1617
"org.apache.maven.resolver:maven-resolver-connector-basic",
18+
"org.apache.maven.resolver:maven-resolver-impl",
1719
"org.apache.maven.resolver:maven-resolver-transport-file",
18-
"org.apache.maven.resolver:maven-resolver-transport-http"
20+
"org.apache.maven.resolver:maven-resolver-transport-http",
21+
"org.apache.maven.resolver:maven-resolver-util",
22+
"org.eclipse.sisu:org.eclipse.sisu.inject"
1923
],
2024
"packageRules": [
2125
{

pom.xml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@
3333
<selenium.version>4.25.0</selenium.version>
3434
<!-- aligned with selenium -->
3535
<guava.version>33.3.1-jre</guava.version>
36+
37+
<!-- Keep them aligned to Maven version -->
3638
<maven.version>3.9.6</maven.version>
39+
<maven-sisu.version>0.9.0.M3</maven-sisu.version>
3740
<maven-resolver.version>1.9.18</maven-resolver.version>
41+
3842
<groovy.version>3.0.22</groovy.version>
3943
<jffi.version>1.3.13</jffi.version>
4044
<spotless.check.skip>false</spotless.check.skip>
@@ -57,6 +61,13 @@
5761
<type>pom</type>
5862
<scope>import</scope>
5963
</dependency>
64+
<dependency>
65+
<groupId>org.ow2.asm</groupId>
66+
<artifactId>asm-bom</artifactId>
67+
<version>9.7</version>
68+
<type>pom</type>
69+
<scope>import</scope>
70+
</dependency>
6071
<dependency>
6172
<groupId>org.slf4j</groupId>
6273
<artifactId>slf4j-bom</artifactId>
@@ -199,6 +210,7 @@ and
199210
<groupId>com.google.inject</groupId>
200211
<artifactId>guice</artifactId>
201212
<version>6.0.0</version>
213+
<classifier>classes</classifier>
202214
<exclusions>
203215
<exclusion>
204216
<groupId>com.google.guava</groupId>
@@ -245,17 +257,33 @@ and
245257
<groupId>org.apache.maven</groupId>
246258
<artifactId>maven-resolver-provider</artifactId>
247259
<version>${maven.version}</version>
260+
<exclusions>
261+
<exclusion>
262+
<groupId>org.eclipse.sisu</groupId>
263+
<artifactId>org.eclipse.sisu.inject</artifactId>
264+
</exclusion>
265+
</exclusions>
248266
</dependency>
249267
<dependency>
250268
<groupId>org.apache.maven</groupId>
251269
<artifactId>maven-settings-builder</artifactId>
252270
<version>${maven.version}</version>
253271
</dependency>
272+
<dependency>
273+
<groupId>org.apache.maven.resolver</groupId>
274+
<artifactId>maven-resolver-api</artifactId>
275+
<version>${maven-resolver.version}</version>
276+
</dependency>
254277
<dependency>
255278
<groupId>org.apache.maven.resolver</groupId>
256279
<artifactId>maven-resolver-connector-basic</artifactId>
257280
<version>${maven-resolver.version}</version>
258281
</dependency>
282+
<dependency>
283+
<groupId>org.apache.maven.resolver</groupId>
284+
<artifactId>maven-resolver-impl</artifactId>
285+
<version>${maven-resolver.version}</version>
286+
</dependency>
259287
<dependency>
260288
<groupId>org.apache.maven.resolver</groupId>
261289
<artifactId>maven-resolver-transport-file</artifactId>
@@ -266,6 +294,11 @@ and
266294
<artifactId>maven-resolver-transport-http</artifactId>
267295
<version>${maven-resolver.version}</version>
268296
</dependency>
297+
<dependency>
298+
<groupId>org.apache.maven.resolver</groupId>
299+
<artifactId>maven-resolver-util</artifactId>
300+
<version>${maven-resolver.version}</version>
301+
</dependency>
269302
<dependency>
270303
<groupId>org.bouncycastle</groupId>
271304
<artifactId>bcpkix-jdk18on</artifactId>
@@ -281,6 +314,12 @@ and
281314
<artifactId>groovy-console</artifactId>
282315
<version>${groovy.version}</version>
283316
</dependency>
317+
<dependency>
318+
<groupId>org.eclipse.sisu</groupId>
319+
<artifactId>org.eclipse.sisu.inject</artifactId>
320+
<version>${maven-sisu.version}</version>
321+
<classifier>no_asm</classifier>
322+
</dependency>
284323
<dependency>
285324
<groupId>org.gitlab4j</groupId>
286325
<artifactId>gitlab4j-api</artifactId>

src/main/java/org/jenkinsci/test/acceptance/utils/aether/AetherModule.java

Lines changed: 26 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -3,81 +3,53 @@
33
import com.cloudbees.sdk.extensibility.Extension;
44
import com.cloudbees.sdk.extensibility.ExtensionModule;
55
import com.google.inject.AbstractModule;
6+
import com.google.inject.Guice;
7+
import com.google.inject.Key;
68
import 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;
209
import 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;
2410
import org.eclipse.aether.DefaultRepositorySystemSession;
2511
import org.eclipse.aether.RepositorySystem;
2612
import 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;
3213
import org.eclipse.aether.repository.LocalRepository;
33-
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
34-
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
3514
import 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;
3923
import 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
5233
public 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

Comments
 (0)