diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index d03649f54..6cf58c087 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -18,7 +18,7 @@ jobs:
contents: read
strategy:
matrix:
- java: ['8', '11','17','21']
+ java: ['11','17','21']
name: Java ${{ matrix.java }}
steps:
- name: Azure login
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8c0cc20f9..b7a157918 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -36,7 +36,7 @@ jobs:
environment: build
strategy:
matrix:
- java: [ '8' ]
+ java: [ '11' ]
name: Java ${{ matrix.java }}
steps:
- uses: actions/checkout@v4
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b500450f7..b4d47a6ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [8.0.0] - 2026-01-07
+
+### Changed
+- **[BREAKING] Minimum Java version requirement updated to Java 11.** Previous versions supported Java 8.
+ Starting with version 8.0.0, Java 11 or later is required to use this SDK.
+
## [7.0.5] - 2025-12-24
### Fixed
diff --git a/data/pom.xml b/data/pom.xml
index 375371066..42f4bb66d 100644
--- a/data/pom.xml
+++ b/data/pom.xml
@@ -37,8 +37,7 @@
maven-compiler-plugin
${maven-compiler-plugin.version}
- ${java.version}
- ${java.version}
+ ${java.version}
diff --git a/data/src/main/java/com/microsoft/azure/kusto/data/UriUtils.java b/data/src/main/java/com/microsoft/azure/kusto/data/UriUtils.java
index 97cdaa57b..8c531ed38 100644
--- a/data/src/main/java/com/microsoft/azure/kusto/data/UriUtils.java
+++ b/data/src/main/java/com/microsoft/azure/kusto/data/UriUtils.java
@@ -3,7 +3,7 @@
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.util.Objects;
public class UriUtils {
@@ -115,7 +115,7 @@ public static String stripFileNameFromCommandLine(String cmdLine) {
String processNameForTracing = cmdLine;
if (processNameForTracing != null) {
- processNameForTracing = Paths.get(processNameForTracing.trim().split(" ")[0]).getFileName().toString();
+ processNameForTracing = Path.of(processNameForTracing.trim().split(" ")[0]).getFileName().toString();
}
return processNameForTracing;
diff --git a/data/src/test/java/com/microsoft/azure/kusto/data/ConnectionStringBuilderTest.java b/data/src/test/java/com/microsoft/azure/kusto/data/ConnectionStringBuilderTest.java
index 45f92d8ed..75dd2656a 100644
--- a/data/src/test/java/com/microsoft/azure/kusto/data/ConnectionStringBuilderTest.java
+++ b/data/src/test/java/com/microsoft/azure/kusto/data/ConnectionStringBuilderTest.java
@@ -12,7 +12,7 @@
import java.io.IOException;
import java.net.URISyntaxException;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@@ -64,8 +64,8 @@ void createWithUserPrompt() {
void createWithAadApplicationCertificate() throws CertificateException, OperatorCreationException,
PKCSException, IOException {
- String certFilePath = Paths.get("src", "test", "resources", "cert.cer").toString();
- String privateKeyPath = Paths.get("src", "test", "resources", "key.pem").toString();
+ String certFilePath = Path.of("src", "test", "resources", "cert.cer").toString();
+ String privateKeyPath = Path.of("src", "test", "resources", "key.pem").toString();
X509Certificate x509Certificate = readPem(certFilePath, "basic").getCertificate();
PrivateKey privateKey = readPem(privateKeyPath, "basic").getKey();
diff --git a/data/src/test/java/com/microsoft/azure/kusto/data/UtilitiesTest.java b/data/src/test/java/com/microsoft/azure/kusto/data/UtilitiesTest.java
index 7e61ee507..dbd93c681 100644
--- a/data/src/test/java/com/microsoft/azure/kusto/data/UtilitiesTest.java
+++ b/data/src/test/java/com/microsoft/azure/kusto/data/UtilitiesTest.java
@@ -22,7 +22,7 @@
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -150,7 +150,7 @@ void removeExtensionFromFileName() {
@Test
@DisplayName("Assert file name extracted from some cmd line")
void extractFileNameFromCommandLine() {
- String cmdLine = Paths.get(" home", "user", "someFile.jar") + " -arg1 val";
+ String cmdLine = Path.of(" home", "user", "someFile.jar") + " -arg1 val";
Assertions.assertEquals(UriUtils.stripFileNameFromCommandLine(cmdLine), "someFile.jar");
}
diff --git a/data/src/test/java/com/microsoft/azure/kusto/data/auth/AadAuthenticationHelperTest.java b/data/src/test/java/com/microsoft/azure/kusto/data/auth/AadAuthenticationHelperTest.java
index 153a38d9d..5683934d1 100644
--- a/data/src/test/java/com/microsoft/azure/kusto/data/auth/AadAuthenticationHelperTest.java
+++ b/data/src/test/java/com/microsoft/azure/kusto/data/auth/AadAuthenticationHelperTest.java
@@ -11,7 +11,7 @@
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.URISyntaxException;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.CertificateException;
@@ -59,8 +59,8 @@ public static void setUp() throws URISyntaxException {
@DisplayName("validate auth with certificate throws exception when missing or invalid parameters")
void acquireWithClientCertificateNullKey() throws CertificateException, OperatorCreationException,
PKCSException, IOException, URISyntaxException {
- String certFilePath = Paths.get("src", "test", "resources", "cert.cer").toString();
- String privateKeyPath = Paths.get("src", "test", "resources", "key.pem").toString();
+ String certFilePath = Path.of("src", "test", "resources", "cert.cer").toString();
+ String privateKeyPath = Path.of("src", "test", "resources", "key.pem").toString();
X509Certificate x509Certificate = readPem(certFilePath, "basic").getCertificate();
PrivateKey privateKey = readPem(privateKeyPath, "basic").getKey();
@@ -114,8 +114,8 @@ public static KeyCert readPem(String path, String password)
@DisplayName("validate cached token. Refresh if needed. Call regularly if no refresh token")
void useCachedTokenAndRefreshWhenNeeded()
throws IOException, DataServiceException, URISyntaxException, CertificateException, OperatorCreationException, PKCSException, DataClientException {
- String certFilePath = Paths.get("src", "test", "resources", "cert.cer").toString();
- String privateKeyPath = Paths.get("src", "test", "resources", "key.pem").toString();
+ String certFilePath = Path.of("src", "test", "resources", "cert.cer").toString();
+ String privateKeyPath = Path.of("src", "test", "resources", "key.pem").toString();
X509Certificate x509Certificate = readPem(certFilePath, "basic").getCertificate();
PrivateKey privateKey = readPem(privateKeyPath, "basic").getKey();
diff --git a/ingest/pom.xml b/ingest/pom.xml
index 6d24a5da7..88681863f 100644
--- a/ingest/pom.xml
+++ b/ingest/pom.xml
@@ -37,8 +37,7 @@
maven-compiler-plugin
${maven-compiler-plugin.version}
- ${java.version}
- ${java.version}
+ ${java.version}
diff --git a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/AzureStorageClientTest.java b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/AzureStorageClientTest.java
index 27a727fd9..bfeaa1324 100644
--- a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/AzureStorageClientTest.java
+++ b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/AzureStorageClientTest.java
@@ -21,7 +21,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import static com.microsoft.azure.kusto.ingest.IngestClientBase.shouldCompress;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -38,9 +38,9 @@ class AzureStorageClientTest {
@BeforeAll
static void setUp() {
- testFilePath = Paths.get("src", "test", "resources", "testdata.json").toString();
+ testFilePath = Path.of("src", "test", "resources", "testdata.json").toString();
testFile = new File(testFilePath);
- String testFilePathCompressed = Paths.get("src", "test", "resources", "testdata.json.gz").toString();
+ String testFilePathCompressed = Path.of("src", "test", "resources", "testdata.json.gz").toString();
testFileCompressed = new File(testFilePathCompressed);
blob = TestUtils.containerWithSasFromContainerName("storageUrl").getAsyncContainer().getBlobAsyncClient("bloby");
}
@@ -145,7 +145,7 @@ void uploadLocalFileToBlob_FileDoesNotExist_IOException() {
@Test
void uploadStreamToBlob_NotCompressMode_UploadStreamIsCalled() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
doAnswer(answer -> Mono.just(10))
.when(azureStorageClientSpy)
.uploadStream(any(InputStream.class), any(BlobAsyncClient.class));
@@ -158,7 +158,7 @@ void uploadStreamToBlob_NotCompressMode_UploadStreamIsCalled() throws IOExceptio
@Test
void uploadStreamToBlob_CompressMode_CompressAndUploadStreamIsCalled() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
doAnswer(answer -> Mono.just(10))
.when(azureStorageClientSpy)
.compressAndUploadStream(any(InputStream.class), any(BlobAsyncClient.class));
@@ -179,7 +179,7 @@ void UploadStreamToBlob_NullInputStream_IllegalArgumentException() {
@Test
void uploadStreamToBlob_NullBlobName_IllegalArgumentException() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
BlobContainerAsyncClient storageUrl = new BlobContainerClientBuilder().endpoint("https://blobPath.blob.core.windows.net/container/blob")
.buildAsyncClient();
assertThrows(
@@ -190,7 +190,7 @@ void uploadStreamToBlob_NullBlobName_IllegalArgumentException() throws IOExcepti
@Test
void uploadStreamToBlob_NullStorageUri_IllegalArgumentException() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
assertThrows(
IllegalArgumentException.class,
() -> azureStorageClient.uploadStreamToBlob(stream, "blobName", null, false));
@@ -235,7 +235,7 @@ void uploadStream_NullInputStream_IllegalArgumentException() {
@Test
void uploadStream_NullBlob_IllegalArgumentException() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
assertThrows(
IllegalArgumentException.class,
() -> azureStorageClient.uploadStream(stream, null));
@@ -252,7 +252,7 @@ void compressAndStream_NullStream_IllegalArgumentException() {
@Test
void compressAndStream_NullBlob_IllegalArgumentException() throws IOException {
- try (InputStream stream = Files.newInputStream(Paths.get(testFilePath))) {
+ try (InputStream stream = Files.newInputStream(Path.of(testFilePath))) {
assertThrows(
IllegalArgumentException.class,
() -> azureStorageClient.compressAndUploadStream(stream, null));
diff --git a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/E2ETest.java b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/E2ETest.java
index 8c0ea0b86..766e9d28f 100644
--- a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/E2ETest.java
+++ b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/E2ETest.java
@@ -23,7 +23,7 @@
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.nio.file.Files;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.security.GeneralSecurityException;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@@ -194,9 +194,9 @@ private static void createTableAndMapping() {
Assertions.fail("Failed to drop and create new table", ex);
}
- resourcesPath = Paths.get(System.getProperty("user.dir"), "src", "test", "resources").toString();
+ resourcesPath = Path.of(System.getProperty("user.dir"), "src", "test", "resources").toString();
try {
- String mappingAsString = new String(Files.readAllBytes(Paths.get(resourcesPath, "dataset_mapping.json")));
+ String mappingAsString = new String(Files.readAllBytes(Path.of(resourcesPath, "dataset_mapping.json")));
queryClient.executeToJsonResult(DB_NAME, String.format(".create table %s ingestion json mapping '%s' '%s'",
tableName, mappingReference, mappingAsString), null);
} catch (Exception ex) {
diff --git a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/QueuedIngestClientTest.java b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/QueuedIngestClientTest.java
index 81e90593f..d09cbfb88 100644
--- a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/QueuedIngestClientTest.java
+++ b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/QueuedIngestClientTest.java
@@ -33,7 +33,7 @@
import java.io.InputStream;
import java.net.URISyntaxException;
import java.nio.file.Files;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
@@ -70,7 +70,7 @@ class QueuedIngestClientTest {
@BeforeAll
static void setUp() throws Exception {
- testFilePath = Paths.get("src", "test", "resources", "testdata.csv").toString();
+ testFilePath = Path.of("src", "test", "resources", "testdata.csv").toString();
when(resourceManagerMock.getShuffledContainers())
.thenReturn(Collections.singletonList(TestUtils.containerWithSasFromAccountNameAndContainerName(ACCOUNT_NAME, "someStorage")));
when(resourceManagerMock.getShuffledQueues())
@@ -222,7 +222,7 @@ void ingestFromFileAsync_FileDoesNotExist_IngestionClientException() {
@Test
void ingestFromStream_UploadStreamToBlobIsCalled() throws Exception {
- InputStream stream = Files.newInputStream(Paths.get(testFilePath));
+ InputStream stream = Files.newInputStream(Path.of(testFilePath));
StreamSourceInfo streamSourceInfo = new StreamSourceInfo(stream, false);
try {
queuedIngestClient.ingestFromStream(streamSourceInfo, ingestionProperties);
diff --git a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/StreamingIngestClientTest.java b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/StreamingIngestClientTest.java
index 84ea09263..ecfcc0365 100644
--- a/ingest/src/test/java/com/microsoft/azure/kusto/ingest/StreamingIngestClientTest.java
+++ b/ingest/src/test/java/com/microsoft/azure/kusto/ingest/StreamingIngestClientTest.java
@@ -40,7 +40,7 @@
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.nio.file.Paths;
+import java.nio.file.Path;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.stream.Stream;
@@ -329,7 +329,7 @@ void ingestFromFile_Csv() throws Exception {
void ingestFromFile_Json() throws Exception {
String path = resourcesDirectory + "testdata.json";
FileSourceInfo fileSourceInfo = new FileSourceInfo(path);
- String contents = new String(Files.readAllBytes(Paths.get(path)), StandardCharsets.UTF_8).trim();
+ String contents = new String(Files.readAllBytes(Path.of(path)), StandardCharsets.UTF_8).trim();
ingestionProperties.setDataFormat(IngestionProperties.DataFormat.JSON);
ingestionProperties.setIngestionMapping("JsonMapping", IngestionMapping.IngestionMappingKind.JSON);
diff --git a/pom.xml b/pom.xml
index f8682ab21..705519246 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,9 +32,9 @@
- 7.0.5
+ 8.0.0
UTF-8
- 1.8
+ 11
1.2.28
@@ -63,18 +63,6 @@
5.11.0
0.8.11
-
-
-
- java8
-
- [1.8,11)
-
-
- 4.5.1
-
-
-
ingest
diff --git a/quickstart/pom.xml b/quickstart/pom.xml
index d07613199..5c9e5913e 100644
--- a/quickstart/pom.xml
+++ b/quickstart/pom.xml
@@ -34,7 +34,7 @@
7.0.5
- 1.8
+ 11
3.2.0
3.8.1
3.3.0
@@ -49,8 +49,7 @@
maven-compiler-plugin
${maven-compiler-plugin.version}
- ${java.version}
- ${java.version}
+ ${java.version}
diff --git a/samples/pom.xml b/samples/pom.xml
index be03ffdc6..ba994b702 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -19,8 +19,7 @@
maven-compiler-plugin
${maven-compiler-plugin.version}
- ${java.version}
- ${java.version}
+ ${java.version}