Skip to content

Commit 6fddd97

Browse files
authored
Use the new resolver provider (apache#1483)
1 parent 8d6bf5f commit 6fddd97

File tree

16 files changed

+176
-151
lines changed

16 files changed

+176
-151
lines changed

maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/DefaultVersionSchemeProvider.java maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/MavenVersionScheme.java

+20-5
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,35 @@
1919
package org.apache.maven.internal.impl.resolver;
2020

2121
import org.apache.maven.api.di.Named;
22-
import org.apache.maven.api.di.Provides;
2322
import org.apache.maven.api.di.Singleton;
2423
import org.eclipse.aether.util.version.GenericVersionScheme;
24+
import org.eclipse.aether.version.InvalidVersionSpecificationException;
25+
import org.eclipse.aether.version.Version;
26+
import org.eclipse.aether.version.VersionConstraint;
27+
import org.eclipse.aether.version.VersionRange;
2528
import org.eclipse.aether.version.VersionScheme;
2629

2730
/**
2831
* Default version scheme provider: provides singleton {@link GenericVersionScheme} instance.
2932
*/
3033
@Singleton
3134
@Named
32-
public final class DefaultVersionSchemeProvider {
35+
public class MavenVersionScheme implements VersionScheme {
3336

34-
@Provides
35-
static VersionScheme getVersionScheme() {
36-
return new GenericVersionScheme();
37+
private final VersionScheme delegate = new GenericVersionScheme();
38+
39+
@Override
40+
public Version parseVersion(String version) throws InvalidVersionSpecificationException {
41+
return delegate.parseVersion(version);
42+
}
43+
44+
@Override
45+
public VersionRange parseVersionRange(String range) throws InvalidVersionSpecificationException {
46+
return delegate.parseVersionRange(range);
47+
}
48+
49+
@Override
50+
public VersionConstraint parseVersionConstraint(String constraint) throws InvalidVersionSpecificationException {
51+
return delegate.parseVersionConstraint(constraint);
3752
}
3853
}

maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/ApiRunner.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
import org.apache.maven.internal.impl.model.*;
6262
import org.apache.maven.internal.impl.resolver.DefaultVersionRangeResolver;
6363
import org.apache.maven.internal.impl.resolver.DefaultVersionResolver;
64-
import org.apache.maven.internal.impl.resolver.DefaultVersionSchemeProvider;
64+
import org.apache.maven.internal.impl.resolver.MavenVersionScheme;
6565
import org.apache.maven.internal.impl.resolver.type.DefaultTypeProvider;
6666
import org.eclipse.aether.DefaultRepositorySystemSession;
6767
import org.eclipse.aether.RepositorySystem;
@@ -104,7 +104,7 @@ public static Session createSession() {
104104
injector.bindImplicit(ExtensibleEnumRegistries.class);
105105
injector.bindImplicit(DefaultTypeProvider.class);
106106

107-
injector.bindImplicit(DefaultVersionSchemeProvider.class);
107+
injector.bindImplicit(MavenVersionScheme.class);
108108
injector.bindImplicit(BuildModelTransformer.class);
109109
injector.bindImplicit(DefaultDependencyManagementImporter.class);
110110
injector.bindImplicit(DefaultDependencyManagementInjector.class);

maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java

-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.apache.maven.artifact.repository.ArtifactRepository;
3131
import org.apache.maven.bridge.MavenRepositorySystem;
3232
import org.apache.maven.model.root.RootLocator;
33-
import org.apache.maven.repository.internal.ModelCacheFactory;
3433
import org.eclipse.aether.RepositorySystem;
3534
import org.eclipse.aether.impl.RemoteRepositoryManager;
3635

@@ -47,7 +46,6 @@ public TestProjectBuilder(
4746
RepositorySystem repoSystem,
4847
RemoteRepositoryManager repositoryManager,
4948
ProjectDependenciesResolver dependencyResolver,
50-
ModelCacheFactory modelCacheFactory,
5149
RootLocator rootLocator) {
5250
super(
5351
modelBuilder,
@@ -57,7 +55,6 @@ public TestProjectBuilder(
5755
repoSystem,
5856
repositoryManager,
5957
dependencyResolver,
60-
modelCacheFactory,
6158
rootLocator);
6259
}
6360

maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
import org.apache.maven.api.xml.XmlNode;
3838
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
3939
import org.apache.maven.execution.MavenExecutionRequest;
40+
import org.apache.maven.internal.impl.resolver.MavenSessionBuilderSupplier;
4041
import org.apache.maven.internal.xml.XmlNodeImpl;
4142
import org.apache.maven.internal.xml.XmlPlexusConfiguration;
4243
import org.apache.maven.model.ModelBase;
43-
import org.apache.maven.repository.internal.MavenSessionBuilderSupplier;
4444
import org.apache.maven.resolver.RepositorySystemSessionFactory;
4545
import org.apache.maven.rtinfo.RuntimeInformation;
4646
import org.apache.maven.settings.Mirror;

maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.apache.maven.artifact.handler.manager.LegacyArtifactHandlerManager;
3939
import org.apache.maven.eventspy.AbstractEventSpy;
4040
import org.apache.maven.execution.ExecutionEvent;
41-
import org.apache.maven.repository.internal.type.DefaultType;
41+
import org.apache.maven.internal.impl.resolver.type.DefaultType;
4242

4343
import static java.util.function.Function.identity;
4444
import static org.apache.maven.internal.impl.Utils.nonNull;

maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java

+38-125
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@
2121
import javax.inject.Named;
2222
import javax.inject.Provider;
2323

24+
import java.io.BufferedReader;
2425
import java.io.IOException;
2526
import java.io.InputStream;
27+
import java.io.InputStreamReader;
28+
import java.lang.annotation.Annotation;
2629
import java.net.URL;
30+
import java.nio.charset.StandardCharsets;
2731
import java.util.ArrayList;
2832
import java.util.Comparator;
2933
import java.util.HashSet;
@@ -33,51 +37,17 @@
3337
import java.util.Set;
3438
import java.util.function.Supplier;
3539
import java.util.stream.Collectors;
36-
import java.util.stream.Stream;
3740

3841
import com.google.inject.AbstractModule;
42+
import com.google.inject.binder.AnnotatedBindingBuilder;
43+
import com.google.inject.name.Names;
3944
import org.apache.maven.api.services.MavenException;
40-
import org.apache.maven.api.services.model.ProfileActivator;
41-
import org.apache.maven.api.spi.LanguageProvider;
42-
import org.apache.maven.api.spi.LifecycleProvider;
43-
import org.apache.maven.api.spi.ModelParser;
44-
import org.apache.maven.api.spi.PackagingProvider;
4545
import org.apache.maven.di.Injector;
4646
import org.apache.maven.di.Key;
4747
import org.apache.maven.di.impl.Binding;
4848
import org.apache.maven.di.impl.DIException;
4949
import org.apache.maven.di.impl.InjectorImpl;
50-
import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory;
51-
import org.apache.maven.internal.aether.LegacyRepositorySystemSessionExtender;
52-
import org.apache.maven.internal.impl.model.BuildModelTransformer;
53-
import org.apache.maven.internal.impl.model.DefaultDependencyManagementImporter;
54-
import org.apache.maven.internal.impl.model.DefaultDependencyManagementInjector;
55-
import org.apache.maven.internal.impl.model.DefaultInheritanceAssembler;
56-
import org.apache.maven.internal.impl.model.DefaultLifecycleBindingsInjector;
57-
import org.apache.maven.internal.impl.model.DefaultModelBuilder;
58-
import org.apache.maven.internal.impl.model.DefaultModelInterpolator;
59-
import org.apache.maven.internal.impl.model.DefaultModelNormalizer;
60-
import org.apache.maven.internal.impl.model.DefaultModelPathTranslator;
61-
import org.apache.maven.internal.impl.model.DefaultModelProcessor;
62-
import org.apache.maven.internal.impl.model.DefaultModelValidator;
63-
import org.apache.maven.internal.impl.model.DefaultModelVersionProcessor;
64-
import org.apache.maven.internal.impl.model.DefaultPathTranslator;
65-
import org.apache.maven.internal.impl.model.DefaultPluginManagementInjector;
66-
import org.apache.maven.internal.impl.model.DefaultProfileInjector;
67-
import org.apache.maven.internal.impl.model.DefaultProfileSelector;
68-
import org.apache.maven.internal.impl.model.DefaultRootLocator;
69-
import org.apache.maven.internal.impl.model.ProfileActivationFilePathInterpolator;
70-
import org.apache.maven.internal.impl.model.profile.FileProfileActivator;
71-
import org.apache.maven.internal.impl.model.profile.JdkVersionProfileActivator;
72-
import org.apache.maven.internal.impl.model.profile.OperatingSystemProfileActivator;
73-
import org.apache.maven.internal.impl.model.profile.PackagingProfileActivator;
74-
import org.apache.maven.internal.impl.model.profile.PropertyProfileActivator;
75-
import org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader;
76-
import org.apache.maven.internal.impl.resolver.DefaultVersionSchemeProvider;
77-
import org.apache.maven.internal.impl.resolver.relocation.DistributionManagementArtifactRelocationSource;
78-
import org.apache.maven.internal.impl.resolver.relocation.UserPropertiesArtifactRelocationSource;
7950
import org.codehaus.plexus.PlexusContainer;
80-
import org.eclipse.aether.version.VersionScheme;
8151

8252
@Named
8353
class SisuDiBridgeModule extends AbstractModule {
@@ -86,7 +56,7 @@ class SisuDiBridgeModule extends AbstractModule {
8656
protected void configure() {
8757
Provider<PlexusContainer> containerProvider = getProvider(PlexusContainer.class);
8858

89-
Injector injector = new InjectorImpl() {
59+
InjectorImpl injector = new InjectorImpl() {
9060
@Override
9161
public <Q> Supplier<Q> getCompiledBinding(Key<Q> key) {
9262
Set<Binding<Q>> res = getBindings(key);
@@ -163,102 +133,45 @@ public <Q> Supplier<Q> getCompiledBinding(Key<Q> key) {
163133
.asIterator();
164134
it.hasNext(); ) {
165135
URL url = it.next();
166-
try (InputStream is = url.openStream()) {
167-
String[] lines = new String(is.readAllBytes()).split("\n");
168-
for (String className : lines) {
169-
try {
170-
Class<?> clazz = classLoader.loadClass(className);
171-
injector.bindImplicit(clazz);
172-
Class<Object> itf = (Class)
173-
(clazz.isInterface()
174-
? clazz
175-
: clazz.getInterfaces().length > 0 ? clazz.getInterfaces()[0] : null);
176-
if (itf != null) {
177-
bind(itf).toProvider(() -> injector.getInstance(clazz));
178-
}
179-
} catch (ClassNotFoundException e) {
180-
// ignore
181-
e.printStackTrace();
182-
}
136+
List<String> lines;
137+
try (InputStream is = url.openStream();
138+
BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
139+
lines = reader.lines()
140+
.map(String::trim)
141+
.filter(s -> !s.isEmpty() && !s.startsWith("#"))
142+
.toList();
143+
}
144+
for (String className : lines) {
145+
try {
146+
Class<?> clazz = classLoader.loadClass(className);
147+
injector.bindImplicit(clazz);
148+
} catch (ClassNotFoundException e) {
149+
// ignore
150+
e.printStackTrace();
183151
}
184152
}
185153
}
186154

187155
} catch (IOException e) {
188156
throw new MavenException(e);
189157
}
190-
Stream.of(
191-
LanguageProvider.class,
192-
LifecycleProvider.class,
193-
PackagingProvider.class,
194-
DefaultArtifactCoordinateFactory.class,
195-
DefaultArtifactDeployer.class,
196-
DefaultArtifactFactory.class,
197-
DefaultArtifactInstaller.class,
198-
DefaultArtifactResolver.class,
199-
DefaultChecksumAlgorithmService.class,
200-
DefaultDependencyCollector.class,
201-
DefaultDependencyCoordinateFactory.class,
202-
DefaultLocalRepositoryManager.class,
203-
DefaultMessageBuilderFactory.class,
204-
DefaultModelXmlFactory.class,
205-
DefaultRepositoryFactory.class,
206-
DefaultSettingsBuilder.class,
207-
DefaultSettingsXmlFactory.class,
208-
DefaultToolchainsBuilder.class,
209-
DefaultToolchainsXmlFactory.class,
210-
DefaultTransportProvider.class,
211-
DefaultVersionParser.class,
212-
DefaultVersionRangeResolver.class,
213-
DefaultVersionResolver.class,
214-
DefaultVersionSchemeProvider.class,
215-
VersionScheme.class,
216-
DefaultModelVersionParser.class,
217-
DefaultRepositorySystemSessionFactory.class,
218-
LegacyRepositorySystemSessionExtender.class,
219-
ExtensibleEnumRegistries.DefaultLanguageRegistry.class,
220-
ExtensibleEnumRegistries.DefaultPathScopeRegistry.class,
221-
ExtensibleEnumRegistries.DefaultProjectScopeRegistry.class,
222-
DefaultModelBuilder.class,
223-
DefaultModelProcessor.class,
224-
ModelParser.class,
225-
DefaultModelValidator.class,
226-
DefaultModelVersionProcessor.class,
227-
DefaultModelNormalizer.class,
228-
DefaultModelInterpolator.class,
229-
DefaultPathTranslator.class,
230-
DefaultUrlNormalizer.class,
231-
DefaultRootLocator.class,
232-
DefaultModelPathTranslator.class,
233-
DefaultModelUrlNormalizer.class,
234-
DefaultSuperPomProvider.class,
235-
DefaultInheritanceAssembler.class,
236-
DefaultProfileSelector.class,
237-
ProfileActivator.class,
238-
DefaultProfileInjector.class,
239-
DefaultPluginManagementInjector.class,
240-
DefaultDependencyManagementInjector.class,
241-
DefaultDependencyManagementImporter.class,
242-
DefaultLifecycleBindingsInjector.class,
243-
DefaultPluginConfigurationExpander.class,
244-
ProfileActivationFilePathInterpolator.class,
245-
BuildModelTransformer.class,
246-
DefaultArtifactDescriptorReader.class,
247-
DistributionManagementArtifactRelocationSource.class,
248-
UserPropertiesArtifactRelocationSource.class,
249-
FileProfileActivator.class,
250-
JdkVersionProfileActivator.class,
251-
OperatingSystemProfileActivator.class,
252-
PackagingProfileActivator.class,
253-
PropertyProfileActivator.class)
254-
.forEach((Class<?> clazz) -> {
255-
injector.bindImplicit(clazz);
256-
Class<Object> itf = (Class)
257-
(clazz.isInterface()
258-
? null
259-
: clazz.getInterfaces().length > 0 ? clazz.getInterfaces()[0] : null);
158+
injector.getBindings().keySet().stream()
159+
.filter(k -> k.getQualifier() != null)
160+
.sorted(Comparator.comparing(k -> k.getRawType().getName()))
161+
.distinct()
162+
.forEach(key -> {
163+
Class<?> clazz = key.getRawType();
164+
Class<Object> itf = (clazz.isInterface()
165+
? null
166+
: (Class<Object>) (clazz.getInterfaces().length > 0 ? clazz.getInterfaces()[0] : clazz));
260167
if (itf != null) {
261-
bind(itf).toProvider(() -> injector.getInstance(clazz));
168+
AnnotatedBindingBuilder<Object> binder = bind(itf);
169+
if (key.getQualifier() instanceof String s) {
170+
binder.annotatedWith(Names.named(s));
171+
} else if (key.getQualifier() instanceof Annotation a) {
172+
binder.annotatedWith(a);
173+
}
174+
binder.toProvider(() -> injector.getInstance(clazz));
262175
}
263176
});
264177
}

maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.apache.maven.internal.impl.InternalSession;
6262
import org.apache.maven.internal.impl.model.DefaultModelBuilder;
6363
import org.apache.maven.internal.impl.model.DefaultProfileSelector;
64+
import org.apache.maven.internal.impl.model.ProfileActivationFilePathInterpolator;
6465
import org.apache.maven.internal.impl.resolver.DefaultModelResolver;
6566
import org.apache.maven.model.v4.MavenModelVersion;
6667
import org.apache.maven.project.MavenProject;
@@ -129,6 +130,9 @@ class DefaultConsumerPomBuilder implements ConsumerPomBuilder {
129130
@Inject
130131
private RemoteRepositoryManager remoteRepositoryManager;
131132

133+
@Inject
134+
private ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
135+
132136
@Override
133137
public Model build(RepositorySystemSession session, MavenProject project, Path src) throws ModelBuilderException {
134138
Model model = project.getModel().getDelegate();
@@ -180,7 +184,7 @@ public List<Profile> getActiveProfiles(
180184
dependencyManagementImporter,
181185
lifecycleBindingsInjector,
182186
pluginConfigurationExpander,
183-
null,
187+
profileActivationFilePathInterpolator,
184188
modelTransformer,
185189
versionParser,
186190
remoteRepositoryManager);

maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public class DefaultMavenPluginManager implements MavenPluginManager {
135135
private final ClassRealmManager classRealmManager;
136136
private final PluginDescriptorCache pluginDescriptorCache;
137137
private final PluginRealmCache pluginRealmCache;
138-
private final DefaultPluginDependenciesResolver pluginDependenciesResolver;
138+
private final PluginDependenciesResolver pluginDependenciesResolver;
139139
private final ExtensionRealmCache extensionRealmCache;
140140
private final PluginVersionResolver pluginVersionResolver;
141141
private final PluginArtifactsCache pluginArtifactsCache;
@@ -153,7 +153,7 @@ public DefaultMavenPluginManager(
153153
ClassRealmManager classRealmManager,
154154
PluginDescriptorCache pluginDescriptorCache,
155155
PluginRealmCache pluginRealmCache,
156-
DefaultPluginDependenciesResolver pluginDependenciesResolver,
156+
PluginDependenciesResolver pluginDependenciesResolver,
157157
ExtensionRealmCache extensionRealmCache,
158158
PluginVersionResolver pluginVersionResolver,
159159
PluginArtifactsCache pluginArtifactsCache,

maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java

+9
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.eclipse.aether.graph.DependencyFilter;
2828
import org.eclipse.aether.graph.DependencyNode;
2929
import org.eclipse.aether.repository.RemoteRepository;
30+
import org.eclipse.aether.resolution.DependencyResult;
3031

3132
/**
3233
* Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility interface
@@ -68,4 +69,12 @@ DependencyNode resolve(
6869
List<RemoteRepository> repositories,
6970
RepositorySystemSession session)
7071
throws PluginResolutionException;
72+
73+
DependencyResult resolvePlugin(
74+
Plugin plugin,
75+
Artifact artifact,
76+
DependencyFilter dependencyFilter,
77+
List<RemoteRepository> remotePluginRepositories,
78+
RepositorySystemSession repositorySession)
79+
throws PluginResolutionException;
7180
}

0 commit comments

Comments
 (0)