This is an automated email from the ASF dual-hosted git repository.
FrankChen021 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new fe9dd22977f build(deps): upgrade org.apache.maven.resolver from 1.3.1
to 2.0.23 (#20386)
fe9dd22977f is described below
commit fe9dd22977f95c8ff4c94f142e066f1ecee260b1
Author: Frank Chen <[email protected]>
AuthorDate: Thu Sep 24 10:05:09 2026 +0800
build(deps): upgrade org.apache.maven.resolver from 1.3.1 to 2.0.23 (#20386)
* Upgrade org.apache.maven.resolver from 1.3.1 to 2.0.23
Dependabot's individual bumps (#20371-#20376) were closed because a
piecemeal, single-artifact bump breaks the build: Resolver 2.0 removed
org.eclipse.aether.spi.locator.ServiceLocator/DefaultServiceLocator,
which is how PullDependencies (the `pull-deps` CLI tool, the only
consumer of maven-resolver in the codebase) bootstraps its
RepositorySystem.
Changes:
- PullDependencies/PullDependenciesTest: replace the
DefaultServiceLocator/MavenRepositorySystemUtils bootstrap with
RepositorySystemSupplier (maven-resolver-supplier-mvn3), and build
sessions via RepositorySystem#createSessionBuilder() instead of
MavenRepositorySystemUtils#newSession(). The session now also
propagates system properties, needed for POMs with JDK-version
profile activation (e.g. anything inheriting from
org.apache.commons:commons-parent) to resolve correctly.
- services/pom.xml, server/pom.xml: bump all org.apache.maven.resolver
artifacts to 2.0.23 via a new maven.resolver.version property;
rename maven-resolver-transport-http -> maven-resolver-transport-apache
(renamed upstream); drop org.apache.maven:maven-resolver-provider
(superseded by maven-resolver-supplier-mvn3, which pulls in a
matching maven-resolver-provider/maven-model-builder 3.9.x
transitively); widen httpclient from test to compile scope in
services (needed by maven-resolver-transport-apache at runtime).
server/pom.xml keeps connector-basic/transport-apache in sync since
it bundles them for the distribution classpath even though no
server source references them directly.
- licenses.yaml: update resolver artifact versions/notices, add
maven-resolver-supplier-mvn3, remove the now-unused
"Maven Artifact Resolver Provider" entry.
Verified: PullDependenciesTest passes (12/12), maven-enforcer's
requireUpperBoundDeps passes on both services and server, and a real
`pull-deps` run against Maven Central succeeds end-to-end with the new
stack.
* Group org.apache.maven.resolver dependabot updates
The six org.apache.maven.resolver:* artifacts must always move
together (they share one pinned version), and a 1.x -> 2.x major bump
needs coordinated source changes, not just a version bump. Grouping
them means dependabot opens one PR for the whole family instead of
six PRs that individually break the build.
* Replace javax.xml.bind.DatatypeConverter with java.util.HexFormat
ExportMetadata was the only reason services declared jakarta.xml.bind-api
directly (DatatypeConverter.parseHexBinary/printHexBinary). Since Druid
now targets Java 25, java.util.HexFormat (available since Java 17)
covers the same hex encode/decode without the extra dependency.
printHexBinary produced upper-case hex, so HEX_FORMAT is configured
with withUpperCase() to keep byte-for-byte identical export output;
parseHex accepts either case regardless of that setting, matching
parseHexBinary's behavior.
jakarta.xml.bind-api is still pulled in transitively (via
druid-processing) and its licenses.yaml entry is used by other
modules, so no further changes are needed there.
* Fix real CI failures from the resolver 2.x migration
Four CI jobs failed on the real build (static-checks-maven,
packaging-check-jdk25, docker-tests, web-checks), all tracing back to
two gaps in the earlier PullDependencies migration:
1. dependency:analyze flagged maven-resolver-connector-basic,
-transport-apache, -impl, and -spi as unused declared dependencies
in services: RepositorySystemSupplier wires them up via
ServiceLoader/SPI, not direct source references, same pattern
server/pom.xml already had a usedDependencies allowlist for.
2. The real functional bug: getRepositorySystemSession() built its
session via a bare repositorySystem.createSessionBuilder(), which
has none of Maven's default DependencySelector/DependencyManager/
DependencyTraverser wiring. Without the scope-based selector that
normally stops a dependency's own test/provided-scoped and optional
dependencies from propagating transitively, dependency collection
walked into druid-processing's test-scope equalsverifier dependency
and its long-dead declared repositories (an old SourceForge SVN
host), corrupting the local POM cache and failing pull-deps in the
real distribution build. Building the session via
SessionBuilderSupplier (the maven-resolver-supplier-mvn3 companion
to RepositorySystemSupplier) restores Maven-equivalent resolution
behavior, matching what MavenRepositorySystemUtils.newSession() did
under 1.3.1.
Verified locally with the exact CI command
(pull-deps -c org.apache.druid.extensions:druid-avro-extensions,
--defaultVersion, -l against a real ~/.m2 populated by mvn install):
previously failed after 5+ minutes walking into equalsverifier's dead
repos, now succeeds in seconds with no equalsverifier/springframework
resolution attempts.
* Fix CodeQL deprecation warnings for LocalRepository(String)
github-advanced-security flagged the LocalRepository(String) /
LocalRepository(File) constructor as deprecated in resolver 2.x (it's
being replaced by Path-based construction). Switch both call sites to
SessionBuilder#withLocalRepositoryBaseDirectories(Path), the
recommended 2.x replacement, which also avoids constructing a
LocalRepository at all. Also switched the test's LocalRepository
#getBasedir() (also deprecated, in favor of #getBasePath()) to match.
* Drop redundant SPI-only resolver dependencies from services/pom.xml
maven-resolver-connector-basic, -transport-apache, -impl, and -spi
were declared explicitly with a pinned version, but nothing in
services' source references them - they're only loaded via
ServiceLoader/SPI by RepositorySystemSupplier at runtime.
maven-resolver-supplier-mvn3 (already a direct dependency) pulls all
four in transitively at the same 2.0.23 version, so the explicit
declarations, their version overrides, and the usedDependencies
allowlist that existed purely to placate dependency:analyze are all
unnecessary. Keeping maven-resolver-api and -util declared explicitly,
since PullDependencies imports classes from both directly.
* Move org.apache.maven.resolver version pinning to root
dependencyManagement
Matches the existing pattern used for other centrally-managed
dependencies like org.apache.httpcomponents:httpclient. services/pom.xml
and server/pom.xml now declare these dependencies without an explicit
<version>, inheriting it from the root pom's dependencyManagement
entry (still keyed off the single maven.resolver.version property), so
there's one place to bump the version instead of several.
* Make PullDependenciesTest's fixture use SessionBuilderSupplier too
Review comment on apache/druid#20386: RealRepositorySystemUtil built
its session with a bare system.createSessionBuilder(), unlike
production's getRepositorySystemSession(), which uses
SessionBuilderSupplier specifically to get Maven's default scope-based
DependencySelector/DependencyManager/DependencyTraverser wiring. Since
all run() tests stub resolveDependencies for the injected session, a
future regression that dropped SessionBuilderSupplier from production
(reintroducing the equalsverifier-style dead-repository traversal bug)
would not have been caught by this test suite. Align the fixture with
production so it does.
---
.github/dependabot.yml | 8 ++++
licenses.yaml | 51 ++++++++--------------
pom.xml | 26 +++++++++++
server/pom.xml | 16 +++----
services/pom.xml | 48 ++++++++------------
.../java/org/apache/druid/cli/ExportMetadata.java | 12 +++--
.../org/apache/druid/cli/PullDependencies.java | 41 +++++++++--------
.../org/apache/druid/cli/PullDependenciesTest.java | 34 +++++----------
8 files changed, 119 insertions(+), 117 deletions(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index da9a028512f..dce1f3394b6 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -9,6 +9,14 @@ updates:
# Protect against not-yet-discovered regressions or security issues in
new releases of dependencies
#
https://github.blog/changelog/2025-07-01-dependabot-supports-configuration-of-a-minimum-package-age/
default-days: 14
+ groups:
+ # The individual org.apache.maven.resolver:* artifacts must move
together: they are all
+ # pinned to the same version in services/pom.xml and server/pom.xml, and
a 1.x -> 2.x major
+ # bump also requires coordinated source/bootstrap changes in
PullDependencies (see the
+ # 2.0.23 upgrade PR). A single-artifact bump breaks the build with a
mixed 1.x/2.x graph.
+ maven-resolver:
+ patterns:
+ - "org.apache.maven.resolver:*"
ignore:
# pin ZooKeeper dependencies to 3.5.x
- dependency-name: "org.apache.zookeeper"
diff --git a/licenses.yaml b/licenses.yaml
index f09aba55aa3..7fe2fa6335d 100644
--- a/licenses.yaml
+++ b/licenses.yaml
@@ -2068,27 +2068,6 @@ notices:
Copyright 2001-2018 The Apache Software Foundation
---
-name: Maven Artifact Resolver Provider
-license_category: binary
-module: java-core
-license_name: Apache License version 2.0
-version: 3.6.0
-libraries:
- - org.apache.maven: maven-resolver-provider
- - org.apache.maven: maven-model
- - org.apache.maven: maven-model-builder
-notices:
- - maven-resolver-provider: |
- Maven Artifact Resolver Provider
- Copyright 2001-2018 The Apache Software Foundation
- - maven-model: |
- Maven Model
- Copyright 2001-2018 The Apache Software Foundation
- - maven-model-builder: |
- Maven Model Builder
- Copyright 2001-2018 The Apache Software Foundation
----
-
name: Apache Maven Artifact
license_category: binary
module: java-core
@@ -2106,38 +2085,42 @@ name: Maven Artifact Resolver Connector Basic
license_category: binary
module: java-core
license_name: Apache License version 2.0
-version: 1.3.1
+version: 2.0.23
libraries:
- org.apache.maven.resolver: maven-resolver-connector-basic
- org.apache.maven.resolver: maven-resolver-spi
- org.apache.maven.resolver: maven-resolver-api
- org.apache.maven.resolver: maven-resolver-util
+ - org.apache.maven.resolver: maven-resolver-supplier-mvn3
notices:
- maven-resolver-connector-basic: |
Maven Artifact Resolver Connector Basic
- Copyright 2001-2018 The Apache Software Foundation
+ Copyright 2001-2026 The Apache Software Foundation
- maven-resolver-spi: |
Maven Artifact Resolver SPI
- Copyright 2001-2018 The Apache Software Foundation
+ Copyright 2001-2026 The Apache Software Foundation
- maven-resolver-api: |
Maven Artifact Resolver API
- Copyright 2001-2018 The Apache Software Foundation
+ Copyright 2001-2026 The Apache Software Foundation
- maven-resolver-util: |
Maven Artifact Resolver Utilities
- Copyright 2001-2018 The Apache Software Foundation
+ Copyright 2001-2026 The Apache Software Foundation
+ - maven-resolver-supplier-mvn3: |
+ Maven Artifact Resolver Instance Supplier Maven3
+ Copyright 2001-2026 The Apache Software Foundation
---
-name: Maven Artifact Resolver Transport HTTP
+name: Maven Artifact Resolver Transport Apache
license_category: binary
module: java-core
license_name: Apache License version 2.0
-version: 1.3.1
+version: 2.0.23
libraries:
- - org.apache.maven.resolver: maven-resolver-transport-http
+ - org.apache.maven.resolver: maven-resolver-transport-apache
notices:
- - maven-resolver-transport-http: |
- Maven Artifact Resolver Transport HTTP
- Copyright 2001-2018 The Apache Software Foundation
+ - maven-resolver-transport-apache: |
+ Maven Artifact Resolver Transport Apache
+ Copyright 2001-2026 The Apache Software Foundation
---
@@ -2145,13 +2128,13 @@ name: Maven Artifact Resolver Implementation
license_category: binary
module: java-core
license_name: Apache License version 2.0
-version: 1.3.1
+version: 2.0.23
libraries:
- org.apache.maven.resolver: maven-resolver-impl
notices:
- maven-resolver-impl: |
Maven Artifact Resolver Implementation
- Copyright 2001-2018 The Apache Software Foundation
+ Copyright 2001-2026 The Apache Software Foundation
---
name: Plexus Component Annotations
diff --git a/pom.xml b/pom.xml
index 36d8cce0079..f9688e5dcca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,6 +74,7 @@
<maven.compiler.release>${java.version}</maven.compiler.release>
<project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
<aether.version>1.1.0</aether.version>
+ <maven.resolver.version>2.0.23</maven.resolver.version>
<apache.curator.version>5.9.0</apache.curator.version>
<apache.kafka.version>4.3.1</apache.kafka.version>
<!-- when updating apache ranger, verify the usage of aws-bundle-sdk
vs aws-logs-sdk
@@ -1056,6 +1057,31 @@
<artifactId>aether-util</artifactId>
<version>${aether.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-api</artifactId>
+ <version>${maven.resolver.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-util</artifactId>
+ <version>${maven.resolver.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-supplier-mvn3</artifactId>
+ <version>${maven.resolver.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-connector-basic</artifactId>
+ <version>${maven.resolver.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.resolver</groupId>
+ <artifactId>maven-resolver-transport-apache</artifactId>
+ <version>${maven.resolver.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
diff --git a/server/pom.xml b/server/pom.xml
index d9cbd2a2ab2..c0634e744a0 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -128,19 +128,16 @@
<artifactId>jsr305</artifactId>
</dependency>
<dependency>
+ <!-- Not used directly by druid-server source; bundled here (in
sync with the
+ versions services/pom.xml declares for
org.apache.druid.cli.PullDependencies)
+ so the resolver connector/transport jars are present on the
assembled
+ distribution classpath. -->
<groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-connector-basic</artifactId>
- <version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-transport-http</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-resolver-provider</artifactId>
- <version>3.6.0</version>
+ <artifactId>maven-resolver-transport-apache</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
@@ -498,8 +495,7 @@
<configuration>
<usedDependencies>
<!-- These are needed for scope: compile -->
-
<dependency>org.apache.maven:maven-resolver-provider</dependency>
-
<dependency>org.apache.maven.resolver:maven-resolver-transport-http</dependency>
+
<dependency>org.apache.maven.resolver:maven-resolver-transport-apache</dependency>
<dependency>org.apache.maven.resolver:maven-resolver-connector-basic</dependency>
<!-- These are needed for scope: runtime -->
<dependency>org.xerial.snappy:snappy-java</dependency>
diff --git a/services/pom.xml b/services/pom.xml
index 1b768cc2a71..38eb1d03f17 100644
--- a/services/pom.xml
+++ b/services/pom.xml
@@ -200,54 +200,40 @@
<artifactId>guice-servlet</artifactId>
</dependency>
<dependency>
+ <!-- Used directly by PullDependencies
(RepositorySystem/RepositorySystemSession). -->
<groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-connector-basic</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-transport-http</artifactId>
- <version>1.3.1</version>
+ <artifactId>maven-resolver-api</artifactId>
</dependency>
<dependency>
+ <!-- Used directly by PullDependencies (JavaScopes,
DependencyFilterUtils,
+ AuthenticationBuilder, DefaultProxySelector). -->
<groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-util</artifactId>
- <version>1.3.1</version>
</dependency>
<dependency>
+ <!-- Replaces the pre-2.0
DefaultServiceLocator/MavenRepositorySystemUtils bootstrap
+ (formerly provided by
org.apache.maven:maven-resolver-provider) used in
+ PullDependencies to construct a
RepositorySystem/RepositorySystemSession.
+ It transitively brings in maven-resolver-connector-basic,
-impl, -spi,
+ -transport-apache, and -transport-file at a consistent
version, so those
+ don't need to be declared here directly - nothing in this
module's source
+ references them; they're only used via ServiceLoader/SPI at
runtime. -->
<groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-impl</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-spi</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-api</artifactId>
- <version>1.3.1</version>
+ <artifactId>maven-resolver-supplier-mvn3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-resolver-provider</artifactId>
- <version>3.6.0</version>
- </dependency>
- <dependency>
+ <!-- plexus-utils 4.x (pulled transitively via
maven-artifact/maven-model-builder) moved
+ its XML pull-parser classes
(org.codehaus.plexus.util.xml.pull.*) out into this
+ module; maven-model-builder needs them at runtime to parse
POMs. -->
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-xml</artifactId>
<version>3.1.0</version>
<scope>runtime</scope>
</dependency>
- <dependency>
- <groupId>jakarta.xml.bind</groupId>
- <artifactId>jakarta.xml.bind-api</artifactId>
- </dependency>
<dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
@@ -283,9 +269,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <!-- Widened from test to compile: maven-resolver-transport-apache
needs Apache
+ HttpClient (not just httpcore, which it already pulls
transitively) at runtime
+ to talk to remote repositories. -->
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
diff --git a/services/src/main/java/org/apache/druid/cli/ExportMetadata.java
b/services/src/main/java/org/apache/druid/cli/ExportMetadata.java
index c5b548da14c..549dc81f5bd 100644
--- a/services/src/main/java/org/apache/druid/cli/ExportMetadata.java
+++ b/services/src/main/java/org/apache/druid/cli/ExportMetadata.java
@@ -49,12 +49,12 @@ import org.apache.druid.timeline.DataSegment;
import org.apache.druid.timeline.DataSegment.PruneSpecsHolder;
import javax.annotation.Nullable;
-import javax.xml.bind.DatatypeConverter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.HexFormat;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -201,6 +201,10 @@ public class ExportMetadata extends GuiceRunnable
private static final ObjectMapper JSON_MAPPER = new DefaultObjectMapper();
+ // Upper case to match the format previously produced by
javax.xml.bind.DatatypeConverter#printHexBinary.
+ // Parsing (parseHex) accepts either case regardless of this setting.
+ private static final HexFormat HEX_FORMAT = HexFormat.of().withUpperCase();
+
public ExportMetadata()
{
super(log);
@@ -434,7 +438,7 @@ public class ExportMetadata extends GuiceRunnable
String payload
) throws IOException
{
- DataSegment segment =
JSON_MAPPER.readValue(DatatypeConverter.parseHexBinary(payload),
DataSegment.class);
+ DataSegment segment = JSON_MAPPER.readValue(HEX_FORMAT.parseHex(payload),
DataSegment.class);
String uniqueId = getUniqueIDFromLocalLoadSpec(segment.getLoadSpec());
String segmentPath =
DataSegmentPusher.getDefaultStorageDirWithExistingUniquePath(segment, uniqueId);
@@ -453,7 +457,7 @@ public class ExportMetadata extends GuiceRunnable
String serialized = JSON_MAPPER.writeValueAsString(segment);
if (useHexBlobs) {
- return DatatypeConverter.printHexBinary(StringUtils.toUtf8(serialized));
+ return HEX_FORMAT.formatHex(StringUtils.toUtf8(serialized));
} else {
return serialized;
}
@@ -468,7 +472,7 @@ public class ExportMetadata extends GuiceRunnable
if (useHexBlobs) {
return payload;
}
- return StringUtils.fromUtf8(DatatypeConverter.parseHexBinary(payload));
+ return StringUtils.fromUtf8(HEX_FORMAT.parseHex(payload));
}
private String convertBooleanString(final String booleanString)
diff --git a/services/src/main/java/org/apache/druid/cli/PullDependencies.java
b/services/src/main/java/org/apache/druid/cli/PullDependencies.java
index 9e617cc16a8..d1c0f1ea59c 100644
--- a/services/src/main/java/org/apache/druid/cli/PullDependencies.java
+++ b/services/src/main/java/org/apache/druid/cli/PullDependencies.java
@@ -32,27 +32,21 @@ import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
-import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.impl.DefaultServiceLocator;
-import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.DependencyResult;
-import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
-import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.transport.http.HttpTransporterFactory;
+import org.eclipse.aether.supplier.RepositorySystemSupplier;
+import org.eclipse.aether.supplier.SessionBuilderSupplier;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.filter.DependencyFilterUtils;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
@@ -60,6 +54,7 @@ import
org.eclipse.aether.util.repository.DefaultProxySelector;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -201,17 +196,29 @@ public class PullDependencies implements Runnable
private RepositorySystem getRepositorySystem()
{
- DefaultServiceLocator locator =
MavenRepositorySystemUtils.newServiceLocator();
- locator.addService(RepositoryConnectorFactory.class,
BasicRepositoryConnectorFactory.class);
- locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
- return locator.getService(RepositorySystem.class);
+ // RepositorySystemSupplier (maven-resolver-supplier-mvn3) replaces the
pre-2.0
+ // DefaultServiceLocator/ServiceLocator bootstrap. It wires up the basic
repository
+ // connector and the Apache HTTP transporter out of the box.
+ return new RepositorySystemSupplier().get();
}
protected RepositorySystemSession getRepositorySystemSession()
{
- DefaultRepositorySystemSession session =
MavenRepositorySystemUtils.newSession();
- LocalRepository localRepo = new LocalRepository(localRepository);
-
session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(session,
localRepo));
+ // SessionBuilderSupplier (maven-resolver-supplier-mvn3) sets up
Maven-equivalent
+ // DependencySelector/DependencyManager/DependencyTraverser defaults on
the builder -
+ // in particular, the scope-based selector that keeps a dependency's own
"test"/"provided"
+ // scoped and optional dependencies from propagating transitively,
matching real Maven
+ // resolution behavior. A bare repositorySystem.createSessionBuilder() has
none of that,
+ // and will walk into every transitive branch (e.g. druid-processing's
test-scope
+ // equalsverifier dependency and its own dead/unreachable declared
repositories).
+ RepositorySystemSession.SessionBuilder sessionBuilder = new
SessionBuilderSupplier(repositorySystem).get()
+
.withLocalRepositoryBaseDirectories(Path.of(localRepository))
+
// Some artifacts' POMs (e.g. those inheriting from
org.apache.commons:commons-parent)
+
// use JDK-version-conditional <profiles>. The model
builder invoked while
+
// resolving descriptors needs "java.version" (and
friends) to evaluate those
+
// profile activations; without this the build fails
with
+
// "Failed to determine Java version for profile
...".
+
.setSystemProperties(System.getProperties());
// Set up the proxy configuration if required
if (useProxy) {
@@ -228,10 +235,10 @@ public class PullDependencies implements Runnable
final DefaultProxySelector proxySelector = new DefaultProxySelector();
proxySelector.add(proxy, null);
- session.setProxySelector(proxySelector);
+ sessionBuilder.setProxySelector(proxySelector);
}
- return session;
+ return sessionBuilder.build();
}
protected List<RemoteRepository> getRemoteRepositories()
diff --git
a/services/src/test/java/org/apache/druid/cli/PullDependenciesTest.java
b/services/src/test/java/org/apache/druid/cli/PullDependenciesTest.java
index f9a59d7329b..847787f575b 100644
--- a/services/src/test/java/org/apache/druid/cli/PullDependenciesTest.java
+++ b/services/src/test/java/org/apache/druid/cli/PullDependenciesTest.java
@@ -23,17 +23,13 @@ import com.google.common.collect.ImmutableList;
import org.apache.druid.guice.ExtensionsConfig;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.testing.TemporaryFolderExtension;
-import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
-import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.graph.DefaultDependencyNode;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyNode;
-import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.Proxy;
@@ -42,9 +38,8 @@ import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResult;
-import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
-import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.transport.http.HttpTransporterFactory;
+import org.eclipse.aether.supplier.RepositorySystemSupplier;
+import org.eclipse.aether.supplier.SessionBuilderSupplier;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
import org.junit.jupiter.api.Assertions;
@@ -54,6 +49,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -302,10 +298,10 @@ public class PullDependenciesTest
pullDependencies.proxyUsername = "user";
pullDependencies.proxyPassword = "password";
- DefaultRepositorySystemSession session = (DefaultRepositorySystemSession)
pullDependencies.getRepositorySystemSession();
+ RepositorySystemSession session =
pullDependencies.getRepositorySystemSession();
LocalRepository localRepo =
session.getLocalRepositoryManager().getRepository();
- Assertions.assertEquals(pullDependencies.localRepository,
localRepo.getBasedir().getAbsolutePath());
+
Assertions.assertEquals(Path.of(pullDependencies.localRepository).toAbsolutePath(),
localRepo.getBasePath().toAbsolutePath());
Proxy proxy = session.getProxySelector().getProxy(
new RemoteRepository.Builder("test", "default",
"http://example.com").build()
@@ -327,9 +323,9 @@ public class PullDependenciesTest
public void testGetRepositorySystemSessionWithoutProxyConfiguration()
{
pullDependencies.useProxy = false;
- DefaultRepositorySystemSession session = (DefaultRepositorySystemSession)
pullDependencies.getRepositorySystemSession();
+ RepositorySystemSession session =
pullDependencies.getRepositorySystemSession();
LocalRepository localRepo =
session.getLocalRepositoryManager().getRepository();
- Assertions.assertEquals(pullDependencies.localRepository,
localRepo.getBasedir().getAbsolutePath());
+
Assertions.assertEquals(Path.of(pullDependencies.localRepository).toAbsolutePath(),
localRepo.getBasePath().toAbsolutePath());
Proxy proxy = session.getProxySelector().getProxy(
new RemoteRepository.Builder("test", "default",
"http://example.com").build()
);
@@ -340,23 +336,17 @@ public class PullDependenciesTest
{
public static RepositorySystem newRepositorySystem()
{
- DefaultServiceLocator locator =
MavenRepositorySystemUtils.newServiceLocator();
- locator.addService(RepositoryConnectorFactory.class,
BasicRepositoryConnectorFactory.class);
- locator.addService(TransporterFactory.class,
HttpTransporterFactory.class);
- return locator.getService(RepositorySystem.class);
+ return new RepositorySystemSupplier().get();
}
- public static DefaultRepositorySystemSession newRepositorySystemSession(
+ public static RepositorySystemSession newRepositorySystemSession(
RepositorySystem system,
String localRepoPath
)
{
- DefaultRepositorySystemSession session =
MavenRepositorySystemUtils.newSession();
-
- LocalRepository localRepo = new LocalRepository(localRepoPath);
-
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session,
localRepo));
-
- return session;
+ return new SessionBuilderSupplier(system).get()
+
.withLocalRepositoryBaseDirectories(Path.of(localRepoPath))
+ .build();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]