Skip to content

Commit 3300928

Browse files
committed
[MNG-8235] Move remote repositories into requests
# Conflicts: # maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelBuilder.java
1 parent 96b1239 commit 3300928

File tree

24 files changed

+457
-92
lines changed

24 files changed

+457
-92
lines changed

api/maven-api-core/src/main/java/org/apache/maven/api/Session.java

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
/**
3939
* The session to install / deploy / resolve artifacts and dependencies.
4040
*
41-
* TODO: move the remote repositories in the requests (plugins will need to access this list somehow)
4241
* TODO: add request trace so that requests can be linked together and through the resolver
4342
* TODO: add a Request interface holding session + parent request
4443
*
@@ -425,6 +424,19 @@ ProducedArtifact createProducedArtifact(
425424
@Nonnull
426425
DownloadedArtifact resolveArtifact(@Nonnull ArtifactCoordinates coordinates);
427426

427+
/**
428+
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
429+
*
430+
* @param coordinates coordinates of the artifact to resolve
431+
* @param repositories repositories to use, if {@code null}, the session repositories are used
432+
* @return requested artifact together with the path to its file
433+
* @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
434+
*
435+
* @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
436+
*/
437+
@Nonnull
438+
DownloadedArtifact resolveArtifact(@Nonnull ArtifactCoordinates coordinates, List<RemoteRepository> repositories);
439+
428440
/**
429441
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
430442
*
@@ -449,6 +461,21 @@ ProducedArtifact createProducedArtifact(
449461
@Nonnull
450462
Collection<DownloadedArtifact> resolveArtifacts(@Nonnull Collection<? extends ArtifactCoordinates> coordinates);
451463

464+
/**
465+
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
466+
*
467+
* @param coordinates coordinates of all artifacts to resolve
468+
* @param repositories repositories to use, if {@code null}, the session repositories are used
469+
* @return requested artifacts together with the paths to their files
470+
* @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
471+
*
472+
* @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
473+
*/
474+
@Nonnull
475+
Collection<DownloadedArtifact> resolveArtifacts(
476+
@Nonnull Collection<? extends ArtifactCoordinates> coordinates,
477+
@Nullable List<RemoteRepository> repositories);
478+
452479
/**
453480
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
454481
*
@@ -461,6 +488,19 @@ ProducedArtifact createProducedArtifact(
461488
@Nonnull
462489
DownloadedArtifact resolveArtifact(@Nonnull Artifact artifact);
463490

491+
/**
492+
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
493+
*
494+
* @param artifact the artifact to resolve
495+
* @param repositories repositories to use, if {@code null}, the session repositories are used
496+
* @return requested artifact together with the path to its file
497+
* @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
498+
*
499+
* @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
500+
*/
501+
@Nonnull
502+
DownloadedArtifact resolveArtifact(@Nonnull Artifact artifact, @Nullable List<RemoteRepository> repositories);
503+
464504
/**
465505
* Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
466506
*
@@ -717,6 +757,23 @@ Map<PathType, List<Path>> resolveDependencies(
717757
@Nonnull
718758
List<Version> resolveVersionRange(@Nonnull ArtifactCoordinates artifact);
719759

760+
/**
761+
* Expands a version range to a list of matching versions, in ascending order.
762+
* For example, resolves "[3.8,4.0)" to "3.8", "3.8.1", "3.8.2".
763+
* The returned list of versions is only dependent on the configured repositories and their contents.
764+
* The supplied request may also refer to a single concrete version rather than a version range.
765+
* In this case though, the result contains simply the (parsed) input version, regardless of the
766+
* repositories and their contents.
767+
*
768+
* @param artifact the artifact for which to resolve the versions
769+
* @param repositories the repositories to use, or the session repositories if {@code null}
770+
* @return a list of resolved {@code Version}s.
771+
* @throws org.apache.maven.api.services.VersionRangeResolverException if the resolution failed
772+
* @see org.apache.maven.api.services.VersionRangeResolver#resolve(Session, ArtifactCoordinates) (String)
773+
*/
774+
@Nonnull
775+
List<Version> resolveVersionRange(@Nonnull ArtifactCoordinates artifact, List<RemoteRepository> repositories);
776+
720777
/**
721778
* Parses the specified version string, for example "1.0".
722779
* <p>

api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolver.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
package org.apache.maven.api.services;
2020

2121
import java.util.Collection;
22+
import java.util.List;
2223

2324
import org.apache.maven.api.ArtifactCoordinates;
25+
import org.apache.maven.api.RemoteRepository;
2426
import org.apache.maven.api.Service;
2527
import org.apache.maven.api.Session;
2628
import org.apache.maven.api.annotations.Experimental;
@@ -55,4 +57,22 @@ public interface ArtifactResolver extends Service {
5557
default ArtifactResolverResult resolve(Session session, Collection<? extends ArtifactCoordinates> coordinates) {
5658
return resolve(ArtifactResolverRequest.build(session, coordinates));
5759
}
60+
61+
/**
62+
* Resolves several artifacts from their coordinates.
63+
*
64+
* @param session {@link Session}
65+
* @param repositories the list of remote repositories or {@code null} to use the session repositories
66+
* @param coordinates array of {@link ArtifactCoordinates}
67+
* @return {@link ArtifactResolverResult}
68+
* @throws ArtifactResolverException in case of an error.
69+
* @throws IllegalArgumentException in case of parameter {@code buildingRequest} is {@code null} or
70+
* parameter {@code coordinates} is {@code null} or invalid
71+
*/
72+
default ArtifactResolverResult resolve(
73+
Session session,
74+
Collection<? extends ArtifactCoordinates> coordinates,
75+
List<RemoteRepository> repositories) {
76+
return resolve(ArtifactResolverRequest.build(session, coordinates, repositories));
77+
}
5878
}

api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919
package org.apache.maven.api.services;
2020

2121
import java.util.Collection;
22+
import java.util.List;
2223

2324
import org.apache.maven.api.ArtifactCoordinates;
25+
import org.apache.maven.api.RemoteRepository;
2426
import org.apache.maven.api.Session;
2527
import org.apache.maven.api.annotations.Experimental;
2628
import org.apache.maven.api.annotations.Immutable;
2729
import org.apache.maven.api.annotations.Nonnull;
2830
import org.apache.maven.api.annotations.NotThreadSafe;
31+
import org.apache.maven.api.annotations.Nullable;
2932

3033
import static org.apache.maven.api.services.BaseRequest.nonNull;
3134

@@ -43,6 +46,9 @@ public interface ArtifactResolverRequest {
4346
@Nonnull
4447
Collection<? extends ArtifactCoordinates> getCoordinates();
4548

49+
@Nonnull
50+
List<RemoteRepository> getRepositories();
51+
4652
@Nonnull
4753
static ArtifactResolverRequestBuilder builder() {
4854
return new ArtifactResolverRequestBuilder();
@@ -57,10 +63,23 @@ static ArtifactResolverRequest build(
5763
.build();
5864
}
5965

66+
@Nonnull
67+
static ArtifactResolverRequest build(
68+
@Nonnull Session session,
69+
@Nonnull Collection<? extends ArtifactCoordinates> coordinates,
70+
List<RemoteRepository> repositories) {
71+
return builder()
72+
.session(nonNull(session, "session cannot be null"))
73+
.coordinates(nonNull(coordinates, "coordinates cannot be null"))
74+
.repositories(repositories)
75+
.build();
76+
}
77+
6078
@NotThreadSafe
6179
class ArtifactResolverRequestBuilder {
6280
Session session;
6381
Collection<? extends ArtifactCoordinates> coordinates;
82+
List<RemoteRepository> repositories;
6483

6584
ArtifactResolverRequestBuilder() {}
6685

@@ -76,26 +95,44 @@ public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactC
7695
return this;
7796
}
7897

98+
@Nonnull
99+
public ArtifactResolverRequestBuilder repositories(List<RemoteRepository> repositories) {
100+
this.repositories = repositories;
101+
return this;
102+
}
103+
79104
@Nonnull
80105
public ArtifactResolverRequest build() {
81-
return new DefaultArtifactResolverRequest(session, coordinates);
106+
return new DefaultArtifactResolverRequest(session, coordinates, repositories);
82107
}
83108

84109
private static class DefaultArtifactResolverRequest extends BaseRequest implements ArtifactResolverRequest {
85110
@Nonnull
86111
private final Collection<? extends ArtifactCoordinates> coordinates;
87112

113+
@Nullable
114+
private final List<RemoteRepository> repositories;
115+
88116
DefaultArtifactResolverRequest(
89-
@Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinates> coordinates) {
117+
@Nonnull Session session,
118+
@Nonnull Collection<? extends ArtifactCoordinates> coordinates,
119+
@Nonnull List<RemoteRepository> repositories) {
90120
super(session);
91121
this.coordinates = unmodifiable(nonNull(coordinates, "coordinates cannot be null"));
122+
this.repositories = repositories;
92123
}
93124

94125
@Nonnull
95126
@Override
96127
public Collection<? extends ArtifactCoordinates> getCoordinates() {
97128
return coordinates;
98129
}
130+
131+
@Nullable
132+
@Override
133+
public List<RemoteRepository> getRepositories() {
134+
return repositories;
135+
}
99136
}
100137
}
101138
}

api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.maven.api.PathScope;
3232
import org.apache.maven.api.PathType;
3333
import org.apache.maven.api.Project;
34+
import org.apache.maven.api.RemoteRepository;
3435
import org.apache.maven.api.Session;
3536
import org.apache.maven.api.annotations.Experimental;
3637
import org.apache.maven.api.annotations.Immutable;
@@ -94,6 +95,9 @@ enum RequestType {
9495
@Nullable
9596
Predicate<PathType> getPathTypeFilter();
9697

98+
@Nullable
99+
List<RemoteRepository> getRepositories();
100+
97101
@Nonnull
98102
static DependencyResolverRequestBuilder builder() {
99103
return new DependencyResolverRequestBuilder();
@@ -170,6 +174,7 @@ class DependencyResolverRequestBuilder {
170174
boolean verbose;
171175
PathScope pathScope;
172176
Predicate<PathType> pathTypeFilter;
177+
List<RemoteRepository> repositories;
173178

174179
DependencyResolverRequestBuilder() {}
175180

@@ -327,6 +332,12 @@ public DependencyResolverRequestBuilder pathTypeFilter(@Nonnull Collection<? ext
327332
return pathTypeFilter(desiredTypes::contains);
328333
}
329334

335+
@Nonnull
336+
public DependencyResolverRequestBuilder repositories(@Nonnull List<RemoteRepository> repositories) {
337+
this.repositories = repositories;
338+
return this;
339+
}
340+
330341
@Nonnull
331342
public DependencyResolverRequest build() {
332343
return new DefaultDependencyResolverRequest(
@@ -339,7 +350,8 @@ public DependencyResolverRequest build() {
339350
managedDependencies,
340351
verbose,
341352
pathScope,
342-
pathTypeFilter);
353+
pathTypeFilter,
354+
repositories);
343355
}
344356

345357
static class DefaultDependencyResolverRequest extends BaseRequest implements DependencyResolverRequest {
@@ -352,6 +364,7 @@ static class DefaultDependencyResolverRequest extends BaseRequest implements Dep
352364
private final boolean verbose;
353365
private final PathScope pathScope;
354366
private final Predicate<PathType> pathTypeFilter;
367+
private final List<RemoteRepository> repositories;
355368

356369
/**
357370
* Creates a request with the specified properties.
@@ -371,7 +384,8 @@ static class DefaultDependencyResolverRequest extends BaseRequest implements Dep
371384
@Nonnull Collection<DependencyCoordinates> managedDependencies,
372385
boolean verbose,
373386
@Nullable PathScope pathScope,
374-
@Nullable Predicate<PathType> pathTypeFilter) {
387+
@Nullable Predicate<PathType> pathTypeFilter,
388+
@Nullable List<RemoteRepository> repositories) {
375389
super(session);
376390
this.requestType = nonNull(requestType, "requestType cannot be null");
377391
this.project = project;
@@ -383,6 +397,7 @@ static class DefaultDependencyResolverRequest extends BaseRequest implements Dep
383397
this.verbose = verbose;
384398
this.pathScope = pathScope;
385399
this.pathTypeFilter = (pathTypeFilter != null) ? pathTypeFilter : (t) -> true;
400+
this.repositories = repositories;
386401
if (verbose && requestType != RequestType.COLLECT) {
387402
throw new IllegalArgumentException("verbose cannot only be true when collecting dependencies");
388403
}
@@ -439,6 +454,11 @@ public Predicate<PathType> getPathTypeFilter() {
439454
return pathTypeFilter;
440455
}
441456

457+
@Override
458+
public List<RemoteRepository> getRepositories() {
459+
return repositories;
460+
}
461+
442462
@Nonnull
443463
@Override
444464
public String toString() {

0 commit comments

Comments
 (0)