diff --git a/spring-boot-project/spring-boot-parent/build.gradle b/spring-boot-project/spring-boot-parent/build.gradle index dc023b253be2..850fe4b2a626 100644 --- a/spring-boot-project/spring-boot-parent/build.gradle +++ b/spring-boot-project/spring-boot-parent/build.gradle @@ -150,13 +150,14 @@ bom { ] } } - library("Maven Resolver", "1.9.23") { + library("Maven Resolver", "1.9.27") { group("org.apache.maven.resolver") { modules = [ "maven-resolver-api", "maven-resolver-connector-basic", "maven-resolver-impl", "maven-resolver-spi", + "maven-resolver-supplier", "maven-resolver-transport-file", "maven-resolver-transport-http", "maven-resolver-util" diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle index d0e574e17c6e..b9bf109325d8 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle @@ -37,12 +37,7 @@ dependencies { compileOnly("org.springframework.data:spring-data-redis") implementation("jakarta.inject:jakarta.inject-api") - implementation("org.apache.maven.resolver:maven-resolver-connector-basic") - implementation("org.apache.maven.resolver:maven-resolver-impl") - implementation("org.apache.maven:maven-resolver-provider") { - exclude(group: "javax.inject", module: "javax.inject") - } - implementation("org.apache.maven.resolver:maven-resolver-transport-http") { + implementation("org.apache.maven.resolver:maven-resolver-supplier") { exclude group: "org.slf4j", module: "jcl-over-slf4j" } implementation("org.assertj:assertj-core") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java index c6df949673ad..dea467e46702 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java @@ -42,16 +42,13 @@ import org.eclipse.aether.RepositorySystem; 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.repository.LocalRepository; import org.eclipse.aether.repository.RemoteRepository; 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.springframework.core.annotation.MergedAnnotation; import org.springframework.core.annotation.MergedAnnotations; @@ -242,41 +239,42 @@ private static List getAdditionalUrls(List annotations) private static List resolveCoordinates(String[] coordinates) { Exception latestFailure = null; - RepositorySystem repositorySystem = createRepositorySystem(); - DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); - session.setSystemProperties(System.getProperties()); - LocalRepository localRepository = new LocalRepository(System.getProperty("user.home") + "/.m2/repository"); - RemoteRepository remoteRepository = new RemoteRepository.Builder("central", "default", - "https://repo.maven.apache.org/maven2") - .build(); - session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(session, localRepository)); - for (int i = 0; i < MAX_RESOLUTION_ATTEMPTS; i++) { - CollectRequest collectRequest = new CollectRequest(null, Arrays.asList(remoteRepository)); - collectRequest.setDependencies(createDependencies(coordinates)); - DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, null); - try { - DependencyResult result = repositorySystem.resolveDependencies(session, dependencyRequest); - List resolvedArtifacts = new ArrayList<>(); - for (ArtifactResult artifact : result.getArtifactResults()) { - resolvedArtifacts.add(artifact.getArtifact().getFile().toURI().toURL()); + RepositorySystem repositorySystem = new RepositorySystemSupplier().get(); + try { + DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); + session.setSystemProperties(System.getProperties()); + LocalRepository localRepository = new LocalRepository(System.getProperty("user.home") + "/.m2/repository"); + RemoteRepository remoteRepository = new RemoteRepository.Builder("central", "default", + "https://repo.maven.apache.org/maven2") + .build(); + session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(session, localRepository)); + for (int i = 0; i < MAX_RESOLUTION_ATTEMPTS; i++) { + CollectRequest collectRequest = new CollectRequest(null, Arrays.asList(remoteRepository)); + collectRequest.setDependencies(createDependencies(coordinates)); + DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, null); + try { + DependencyResult result = repositorySystem.resolveDependencies(session, dependencyRequest); + List resolvedArtifacts = new ArrayList<>(); + for (ArtifactResult artifact : result.getArtifactResults()) { + resolvedArtifacts.add(artifact.getArtifact().getFile().toURI().toURL()); + } + return resolvedArtifacts; + } + catch (Exception ex) { + latestFailure = ex; } - return resolvedArtifacts; + } + throw new IllegalStateException("Resolution failed after " + MAX_RESOLUTION_ATTEMPTS + " attempts", + latestFailure); + } + finally { + try { + repositorySystem.shutdown(); } catch (Exception ex) { - latestFailure = ex; + // Ignore } } - throw new IllegalStateException("Resolution failed after " + MAX_RESOLUTION_ATTEMPTS + " attempts", - latestFailure); - } - - @SuppressWarnings("deprecation") - private static RepositorySystem createRepositorySystem() { - org.eclipse.aether.impl.DefaultServiceLocator serviceLocator = MavenRepositorySystemUtils.newServiceLocator(); - serviceLocator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class); - serviceLocator.addService(TransporterFactory.class, HttpTransporterFactory.class); - RepositorySystem repositorySystem = serviceLocator.getService(RepositorySystem.class); - return repositorySystem; } private static List createDependencies(String[] allCoordinates) {