diff --git a/pom.xml b/pom.xml
index f3fc53a..26ceb76 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,12 +9,12 @@
org.springframework.boot
spring-boot-starter-parent
- 2.7.6
+ 3.5.0
2.0.0.RELEASE
- 1.18.26
+ 1.18.38
@@ -105,20 +105,20 @@
- org.apache.httpcomponents
- httpclient
+ org.apache.httpcomponents.client5
+ httpclient5
org.jsoup
jsoup
- 1.15.3
+ 1.20.1
com.google.guava
guava
- 32.0.1-jre
+ 33.4.8-jre
@@ -159,25 +159,25 @@
org.apache.maven.shared
maven-invoker
- 3.2.0
+ 3.3.0
org.jgrapht
jgrapht-core
- 0.9.1
+ 1.5.2
- com.github.tomakehurst
+ org.wiremock
wiremock
- 2.27.2
+ 3.13.1
test
- javax.servlet
- javax.servlet-api
+ jakarta.servlet
+ jakarta.servlet-api
test
diff --git a/src/main/java/org/springframework/data/release/build/BuildExecutor.java b/src/main/java/org/springframework/data/release/build/BuildExecutor.java
index b82f43d..c6fe869 100644
--- a/src/main/java/org/springframework/data/release/build/BuildExecutor.java
+++ b/src/main/java/org/springframework/data/release/build/BuildExecutor.java
@@ -36,15 +36,14 @@ import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Collectors;
-import javax.annotation.PreDestroy;
-
import org.apache.commons.io.IOUtils;
+
import org.springframework.data.release.infra.InfrastructureOperations;
import org.springframework.data.release.io.Workspace;
import org.springframework.data.release.model.JavaVersion;
import org.springframework.data.release.model.Project;
-import org.springframework.data.release.model.SupportedProject;
import org.springframework.data.release.model.ProjectAware;
+import org.springframework.data.release.model.SupportedProject;
import org.springframework.data.release.utils.ListWrapperCollector;
import org.springframework.data.util.Streamable;
import org.springframework.plugin.core.PluginRegistry;
@@ -64,11 +63,6 @@ class BuildExecutor {
private final ExecutorService executor;
private final Workspace workspace;
- @PreDestroy
- public void shutdown() {
- executor.shutdown();
- }
-
/**
* Selects the build system for each module contained in the given iteration and executes the given function for it
* considering pre-requites, honoring the order.
@@ -155,8 +149,7 @@ class BuildExecutor {
.collect(toSummaryCollector());
}
- private CompletableFuture run(M module,
- BiFunction function) {
+ private CompletableFuture run(M module, BiFunction function) {
Assert.notNull(module, "Module must not be null!");
diff --git a/src/main/java/org/springframework/data/release/documentation/DocumentationCommands.java b/src/main/java/org/springframework/data/release/documentation/DocumentationCommands.java
index 8930c68..3e15b09 100644
--- a/src/main/java/org/springframework/data/release/documentation/DocumentationCommands.java
+++ b/src/main/java/org/springframework/data/release/documentation/DocumentationCommands.java
@@ -30,6 +30,7 @@ import java.util.stream.Collectors;
import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.Ansi.Color;
+
import org.springframework.data.release.CliComponent;
import org.springframework.data.release.TimedCommand;
import org.springframework.data.release.build.BuildOperations;
@@ -44,7 +45,7 @@ import org.springframework.data.release.model.TrainIteration;
import org.springframework.data.release.utils.ExecutionUtils;
import org.springframework.data.release.utils.Logger;
import org.springframework.data.util.Streamable;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
import org.springframework.shell.support.table.Table;
@@ -168,7 +169,7 @@ public class DocumentationCommands extends TimedCommand {
.thenComparing(CheckedLink::getUrl)).forEach(checkedLink -> {
Ansi ansi = Ansi.ansi();
- HttpStatus status = checkedLink.getResult();
+ HttpStatusCode status = checkedLink.getResult();
if (status.is2xxSuccessful()) {
ansi.fg(Color.GREEN);
} else if (status.is4xxClientError()) {
diff --git a/src/main/java/org/springframework/data/release/documentation/DocumentationOperations.java b/src/main/java/org/springframework/data/release/documentation/DocumentationOperations.java
index a3649cd..42b756d 100644
--- a/src/main/java/org/springframework/data/release/documentation/DocumentationOperations.java
+++ b/src/main/java/org/springframework/data/release/documentation/DocumentationOperations.java
@@ -40,6 +40,7 @@ import org.jsoup.select.Elements;
import org.springframework.data.release.model.Project;
import org.springframework.data.release.utils.Logger;
import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
@@ -86,7 +87,7 @@ class DocumentationOperations {
return new ReportFlags(set);
}
- public boolean isIncluded(HttpStatus status) {
+ public boolean isIncluded(HttpStatusCode status) {
if (flags.contains(ReportFlag.ALL)) {
return true;
@@ -125,7 +126,7 @@ class DocumentationOperations {
return new PageStats(project, linkStats.filter(reportFlags));
}
- public PageStats sort(Comparator comparator){
+ public PageStats sort(Comparator comparator) {
return new PageStats(project, linkStats.sort(comparator));
}
@@ -150,7 +151,7 @@ class DocumentationOperations {
public LinkStats filter(ReportFlags reportFlags) {
List filtered = checkedLinks.stream().filter(entry -> {
- HttpStatus status = entry.getResult();
+ HttpStatusCode status = entry.getResult();
return reportFlags.isIncluded(status);
}).collect(Collectors.toList());
@@ -168,7 +169,7 @@ class DocumentationOperations {
@Value
static class CheckedLink {
String url;
- HttpStatus result;
+ HttpStatusCode result;
}
@RequiredArgsConstructor
@@ -198,7 +199,7 @@ class DocumentationOperations {
logger.log(project, "Found %s links.", links.size());
- Map> resultMap = new LinkedHashMap<>(200);
+ Map> resultMap = new LinkedHashMap<>(200);
links.forEach(link -> {
String href = link.attr("href");
@@ -224,7 +225,7 @@ class DocumentationOperations {
return stats;
}
- private void checkUrl(Map> resultMap, String url) {
+ private void checkUrl(Map> resultMap, String url) {
resultMap.computeIfAbsent(url, key -> webClient.get().uri(url)
.exchangeToMono(clientResponse -> clientResponse.toBodilessEntity().thenReturn(clientResponse.statusCode()))
diff --git a/src/main/java/org/springframework/data/release/git/GitProperties.java b/src/main/java/org/springframework/data/release/git/GitProperties.java
index aa33c73..85608b1 100644
--- a/src/main/java/org/springframework/data/release/git/GitProperties.java
+++ b/src/main/java/org/springframework/data/release/git/GitProperties.java
@@ -15,14 +15,14 @@
*/
package org.springframework.data.release.git;
+import jakarta.annotation.PostConstruct;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
-import javax.annotation.PostConstruct;
-
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
+
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.data.release.model.Gpg;
import org.springframework.data.release.model.Password;
diff --git a/src/main/java/org/springframework/data/release/io/Workspace.java b/src/main/java/org/springframework/data/release/io/Workspace.java
index 3b635da..f898d67 100644
--- a/src/main/java/org/springframework/data/release/io/Workspace.java
+++ b/src/main/java/org/springframework/data/release/io/Workspace.java
@@ -17,6 +17,7 @@ package org.springframework.data.release.io;
import static org.springframework.data.release.utils.StreamUtils.*;
+import jakarta.annotation.PostConstruct;
import lombok.AccessLevel;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@@ -38,10 +39,9 @@ import java.util.Scanner;
import java.util.function.Predicate;
import java.util.stream.Stream;
-import javax.annotation.PostConstruct;
-
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.data.release.model.Project;
import org.springframework.data.release.model.Projects;
import org.springframework.data.release.model.SupportedProject;
import org.springframework.data.release.utils.Logger;
diff --git a/src/main/java/org/springframework/data/release/issues/github/GitHubProperties.java b/src/main/java/org/springframework/data/release/issues/github/GitHubProperties.java
index 6924b44..b5ed447 100644
--- a/src/main/java/org/springframework/data/release/issues/github/GitHubProperties.java
+++ b/src/main/java/org/springframework/data/release/issues/github/GitHubProperties.java
@@ -15,6 +15,7 @@
*/
package org.springframework.data.release.issues.github;
+import jakarta.annotation.PostConstruct;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
@@ -22,8 +23,6 @@ import lombok.RequiredArgsConstructor;
import java.util.List;
-import javax.annotation.PostConstruct;
-
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.data.release.git.GitProperties;
import org.springframework.data.release.utils.HttpBasicCredentials;
diff --git a/src/main/java/org/springframework/data/release/model/Password.java b/src/main/java/org/springframework/data/release/model/Password.java
index 29698ed..275ea75 100644
--- a/src/main/java/org/springframework/data/release/model/Password.java
+++ b/src/main/java/org/springframework/data/release/model/Password.java
@@ -47,6 +47,10 @@ public class Password implements Masked {
return new Password(password);
}
+ public char[] toCharArray() {
+ return value.toCharArray();
+ }
+
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
diff --git a/src/main/java/org/springframework/data/release/utils/HttpComponentsClientHttpRequestFactoryBuilder.java b/src/main/java/org/springframework/data/release/utils/HttpComponentsClientHttpRequestFactoryBuilder.java
index 70099c3..7155e7b 100644
--- a/src/main/java/org/springframework/data/release/utils/HttpComponentsClientHttpRequestFactoryBuilder.java
+++ b/src/main/java/org/springframework/data/release/utils/HttpComponentsClientHttpRequestFactoryBuilder.java
@@ -17,18 +17,19 @@ package org.springframework.data.release.utils;
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.hc.client5.http.auth.AuthCache;
+import org.apache.hc.client5.http.auth.AuthScope;
+import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
+import org.apache.hc.client5.http.impl.auth.BasicAuthCache;
+import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
+import org.apache.hc.client5.http.impl.auth.BasicScheme;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.client5.http.protocol.HttpClientContext;
+import org.apache.hc.core5.http.HttpHost;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.AuthCache;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.impl.auth.BasicScheme;
-import org.apache.http.impl.client.BasicAuthCache;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.data.util.Lazy;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpRequest;
@@ -41,8 +42,8 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
*/
public class HttpComponentsClientHttpRequestFactoryBuilder {
- private final CredentialsProvider credsProvider = new BasicCredentialsProvider();
- private final AuthCache authCache = new BasicAuthCache();
+ private final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
+ private final BasicAuthCache authCache = new BasicAuthCache();
private HttpComponentsClientHttpRequestFactoryBuilder() {
@@ -93,15 +94,19 @@ public class HttpComponentsClientHttpRequestFactoryBuilder {
return factory;
}
- private static void addPreemptiveAuth(CredentialsProvider credsProvider, AuthCache authCache, String requestUrl,
+ private static void addPreemptiveAuth(BasicCredentialsProvider credsProvider, AuthCache authCache, String requestUrl,
HttpBasicCredentials credentials) {
- HttpHost host = HttpHost.create(requestUrl);
+ try {
+ HttpHost host = HttpHost.create(requestUrl);
- credsProvider.setCredentials(new AuthScope(host),
- new UsernamePasswordCredentials(credentials.getUsername(), credentials.getPassword().toString()));
+ credsProvider.setCredentials(new AuthScope(host),
+ new UsernamePasswordCredentials(credentials.getUsername(), credentials.getPassword().toCharArray()));
- authCache.put(host, new BasicScheme());
+ authCache.put(host, new BasicScheme());
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException(e);
+ }
}
}