This is an automated email from the ASF dual-hosted git repository.

tballison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new efd000f9a6 Remove lombok e2e (#2925)
efd000f9a6 is described below

commit efd000f9a60b5bbcb76260616e93fa8fbc4f5a52
Author: Tim Allison <[email protected]>
AuthorDate: Tue Jul 7 11:18:39 2026 -0400

    Remove lombok e2e (#2925)
---
 tika-e2e-tests/pom.xml                             | 17 -----
 tika-e2e-tests/tika-grpc/pom.xml                   |  7 --
 .../org/apache/tika/pipes/ExternalTestBase.java    | 43 ++++++------
 .../pipes/filesystem/FileSystemFetcherTest.java    | 24 +++----
 .../tika/pipes/filesystem/HandlerTypeTest.java     | 41 ++++++------
 .../tika/pipes/ignite/IgniteConfigStoreTest.java   | 77 +++++++++++-----------
 tika-parent/pom.xml                                |  1 -
 7 files changed, 95 insertions(+), 115 deletions(-)

diff --git a/tika-e2e-tests/pom.xml b/tika-e2e-tests/pom.xml
index 06c3e5cb7f..5f60869446 100644
--- a/tika-e2e-tests/pom.xml
+++ b/tika-e2e-tests/pom.xml
@@ -103,14 +103,6 @@
                 <artifactId>jackson-databind</artifactId>
                 <version>${jackson.version}</version>
             </dependency>
-
-            <!-- Lombok -->
-            <dependency>
-                <groupId>org.projectlombok</groupId>
-                <artifactId>lombok</artifactId>
-                <version>${lombok.version}</version>
-                <optional>true</optional>
-            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -123,15 +115,6 @@
                     <version>3.15.0</version>
                     <configuration>
                         <release>17</release>
-                        <!-- maven-compiler-plugin 3.15 no longer 
auto-discovers classpath
-                             annotation processors; declare Lombok explicitly 
so @Slf4j runs. -->
-                        <annotationProcessorPaths>
-                            <path>
-                                <groupId>org.projectlombok</groupId>
-                                <artifactId>lombok</artifactId>
-                                <version>${lombok.version}</version>
-                            </path>
-                        </annotationProcessorPaths>
                     </configuration>
                 </plugin>
                 <plugin>
diff --git a/tika-e2e-tests/tika-grpc/pom.xml b/tika-e2e-tests/tika-grpc/pom.xml
index 4dd87ed12c..e4c91463e4 100644
--- a/tika-e2e-tests/tika-grpc/pom.xml
+++ b/tika-e2e-tests/tika-grpc/pom.xml
@@ -70,13 +70,6 @@
             <artifactId>jackson-databind</artifactId>
         </dependency>
 
-        <!-- Lombok -->
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-        </dependency>
-
         <!-- JUnit 5 -->
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ExternalTestBase.java
 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ExternalTestBase.java
index d0d135309d..edcfd9a445 100644
--- 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ExternalTestBase.java
+++ 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ExternalTestBase.java
@@ -43,12 +43,13 @@ import java.util.zip.ZipInputStream;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
-import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.TestInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.DockerComposeContainer;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.Wait;
@@ -60,9 +61,9 @@ import org.apache.tika.TikaGrpc;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @Testcontainers
-@Slf4j
 @Tag("E2ETest")
 public abstract class ExternalTestBase {
+    private static final Logger LOG = 
LoggerFactory.getLogger(ExternalTestBase.class);
     public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
     public static final int MAX_STARTUP_TIMEOUT = 120;
     public static final String GOV_DOCS_FOLDER = "/tika/govdocs1";
@@ -88,7 +89,7 @@ public abstract class ExternalTestBase {
     }
     
     private static void startLocalGrpcServer() throws Exception {
-        log.info("Starting local tika-grpc server using Maven exec");
+        LOG.info("Starting local tika-grpc server using Maven exec");
         
         Path tikaGrpcDir = findTikaGrpcDirectory();
         Path configFile = 
Path.of("src/test/resources/tika-config.json").toAbsolutePath();
@@ -97,8 +98,8 @@ public abstract class ExternalTestBase {
             throw new IllegalStateException("Config file not found: " + 
configFile);
         }
         
-        log.info("Using tika-grpc from: {}", tikaGrpcDir);
-        log.info("Using config file: {}", configFile);
+        LOG.info("Using tika-grpc from: {}", tikaGrpcDir);
+        LOG.info("Using config file: {}", configFile);
         
         String javaHome = System.getProperty("java.home");
         boolean isWindows = 
System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("win");
@@ -131,10 +132,10 @@ public abstract class ExternalTestBase {
                     new InputStreamReader(localGrpcProcess.getInputStream(), 
StandardCharsets.UTF_8))) {
                 String line;
                 while ((line = reader.readLine()) != null) {
-                    log.info("tika-grpc: {}", line);
+                    LOG.info("tika-grpc: {}", line);
                 }
             } catch (IOException e) {
-                log.error("Error reading server output", e);
+                LOG.error("Error reading server output", e);
             }
         });
         logThread.setDaemon(true);
@@ -142,7 +143,7 @@ public abstract class ExternalTestBase {
         
         waitForServerReady();
         
-        log.info("Local tika-grpc server started successfully on port {}", 
GRPC_PORT);
+        LOG.info("Local tika-grpc server started successfully on port {}", 
GRPC_PORT);
     }
     
     private static Path findTikaGrpcDirectory() {
@@ -173,10 +174,10 @@ public abstract class ExternalTestBase {
             try {
                 TikaGrpc.TikaBlockingStub stub = 
TikaGrpc.newBlockingStub(testChannel);
                 stub.listFetchers(ListFetchersRequest.newBuilder().build());
-                log.info("gRPC server is ready");
+                LOG.info("gRPC server is ready");
                 return;
             } catch (Exception e) {
-                log.trace("gRPC server not ready yet (attempt {}/{}): {}", i + 
1, maxAttempts, e.getMessage());
+                LOG.trace("gRPC server not ready yet (attempt {}/{}): {}", i + 
1, maxAttempts, e.getMessage());
             } finally {
                 testChannel.shutdown();
                 testChannel.awaitTermination(1, TimeUnit.SECONDS);
@@ -191,7 +192,7 @@ public abstract class ExternalTestBase {
     }
     
     private static void startDockerGrpcServer() {
-        log.info("Starting Docker Compose tika-grpc server");
+        LOG.info("Starting Docker Compose tika-grpc server");
         
         String composeFilePath = 
System.getProperty("tika.docker.compose.file");
         if (composeFilePath == null || composeFilePath.isBlank()) {
@@ -208,11 +209,11 @@ public abstract class ExternalTestBase {
                 .withStartupTimeout(Duration.of(MAX_STARTUP_TIMEOUT, 
ChronoUnit.SECONDS))
                 .withExposedService("tika-grpc", 50052, 
                     Wait.forLogMessage(".*Server started.*\\n", 1))
-                .withLogConsumer("tika-grpc", new Slf4jLogConsumer(log));
+                .withLogConsumer("tika-grpc", new Slf4jLogConsumer(LOG));
         
         composeContainer.start();
         
-        log.info("Docker Compose containers started successfully");
+        LOG.info("Docker Compose containers started successfully");
     }
 
     private static void loadGovdocs1() throws IOException, 
InterruptedException {
@@ -230,7 +231,7 @@ public abstract class ExternalTestBase {
                     if (attempt >= retries) {
                         throw e;
                     }
-                    log.warn("Download attempt {} failed, retrying in 10 
seconds...", attempt, e);
+                    LOG.warn("Download attempt {} failed, retrying in 10 
seconds...", attempt, e);
                     TimeUnit.SECONDS.sleep(10);
                 }
             }
@@ -253,13 +254,13 @@ public abstract class ExternalTestBase {
                 Files.copy(in, targetDir.resolve(fixture), 
StandardCopyOption.REPLACE_EXISTING);
             }
         }
-        log.info("Copied {} test fixtures to {}", fixtures.length, targetDir);
+        LOG.info("Copied {} test fixtures to {}", fixtures.length, targetDir);
     }
 
     @AfterAll
     void close() {
         if (USE_LOCAL_SERVER && localGrpcProcess != null) {
-            log.info("Stopping local gRPC server");
+            LOG.info("Stopping local gRPC server");
             localGrpcProcess.destroy();
             try {
                 if (!localGrpcProcess.waitFor(10, TimeUnit.SECONDS)) {
@@ -284,14 +285,14 @@ public abstract class ExternalTestBase {
             Path zipPath = targetDir.resolve(zipName);
 
             if (Files.exists(zipPath)) {
-                log.info("{} already exists, skipping download", zipName);
+                LOG.info("{} already exists, skipping download", zipName);
             } else {
-                log.info("Downloading {} from {}...", zipName, url);
+                LOG.info("Downloading {} from {}...", zipName, url);
                 try (InputStream in = new URL(url).openStream()) {
                     Files.copy(in, zipPath, 
StandardCopyOption.REPLACE_EXISTING);
                 }
             }
-            log.info("Unzipping {}...", zipName);
+            LOG.info("Unzipping {}...", zipName);
             try (ZipInputStream zis = new ZipInputStream(new 
FileInputStream(zipPath.toFile()))) {
                 ZipEntry entry;
                 while ((entry = zis.getNextEntry()) != null) {
@@ -309,7 +310,7 @@ public abstract class ExternalTestBase {
             }
         }
         
-        log.info("Finished downloading and extracting govdocs1 files");
+        LOG.info("Finished downloading and extracting govdocs1 files");
     }
 
     public static void assertAllFilesFetched(Path baseDir, 
List<FetchAndParseReply> successes, 
@@ -337,7 +338,7 @@ public abstract class ExternalTestBase {
         }
         
         Assertions.assertNotEquals(0, successes.size(), "Should have some 
successful fetches");
-        log.info("Processed {} files: {} successes, {} errors", 
allFetchKeys.size(), successes.size(), errors.size());
+        LOG.info("Processed {} files: {} successes, {} errors", 
allFetchKeys.size(), successes.size(), errors.size());
         Assertions.assertEquals(keysFromGovdocs1, allFetchKeys, () -> {
             Set<String> missing = new HashSet<>(keysFromGovdocs1);
             missing.removeAll(allFetchKeys);
diff --git 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/FileSystemFetcherTest.java
 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/FileSystemFetcherTest.java
index 92bfc72575..065aa7890a 100644
--- 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/FileSystemFetcherTest.java
+++ 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/FileSystemFetcherTest.java
@@ -27,11 +27,12 @@ import java.util.stream.Stream;
 
 import io.grpc.ManagedChannel;
 import io.grpc.stub.StreamObserver;
-import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.tika.FetchAndParseReply;
 import org.apache.tika.FetchAndParseRequest;
@@ -41,9 +42,10 @@ import org.apache.tika.TikaGrpc;
 import org.apache.tika.pipes.ExternalTestBase;
 import org.apache.tika.pipes.fetcher.fs.FileSystemFetcherConfig;
 
-@Slf4j
 @DisabledOnOs(value = OS.WINDOWS, disabledReason = "exec:exec classpath 
exceeds Windows CreateProcess command-line length limit")
 class FileSystemFetcherTest extends ExternalTestBase {
+    private static final Logger LOG = 
LoggerFactory.getLogger(FileSystemFetcherTest.class);
+
     
     @Test
     void testFileSystemFetcher() throws Exception {
@@ -59,7 +61,7 @@ class FileSystemFetcherTest extends ExternalTestBase {
         config.setBasePath(basePath);
         
         String configJson = OBJECT_MAPPER.writeValueAsString(config);
-        log.info("Creating fetcher with config (basePath={}): {}", basePath, 
configJson);
+        LOG.info("Creating fetcher with config (basePath={}): {}", basePath, 
configJson);
         
         SaveFetcherReply saveReply = 
blockingStub.saveFetcher(SaveFetcherRequest
                 .newBuilder()
@@ -68,7 +70,7 @@ class FileSystemFetcherTest extends ExternalTestBase {
                 .setFetcherConfigJson(configJson)
                 .build());
         
-        log.info("Fetcher created: {}", saveReply.getFetcherId());
+        LOG.info("Fetcher created: {}", saveReply.getFetcherId());
 
         List<FetchAndParseReply> successes = Collections.synchronizedList(new 
ArrayList<>());
         List<FetchAndParseReply> errors = Collections.synchronizedList(new 
ArrayList<>());
@@ -78,7 +80,7 @@ class FileSystemFetcherTest extends ExternalTestBase {
                 requestStreamObserver = 
tikaStub.fetchAndParseBiDirectionalStreaming(new StreamObserver<>() {
             @Override
             public void onNext(FetchAndParseReply fetchAndParseReply) {
-                log.debug("Reply from fetch-and-parse - key={}, status={}", 
+                LOG.debug("Reply from fetch-and-parse - key={}, status={}", 
                     fetchAndParseReply.getFetchKey(), 
fetchAndParseReply.getStatus());
                 if 
("FETCH_AND_PARSE_EXCEPTION".equals(fetchAndParseReply.getStatus())) {
                     errors.add(fetchAndParseReply);
@@ -89,14 +91,14 @@ class FileSystemFetcherTest extends ExternalTestBase {
 
             @Override
             public void onError(Throwable throwable) {
-                log.error("Received an error", throwable);
+                LOG.error("Received an error", throwable);
                 Assertions.fail(throwable);
                 countDownLatch.countDown();
             }
 
             @Override
             public void onCompleted() {
-                log.info("Finished streaming fetch and parse replies");
+                LOG.info("Finished streaming fetch and parse replies");
                 countDownLatch.countDown();
             }
         });
@@ -122,13 +124,13 @@ class FileSystemFetcherTest extends ExternalTestBase {
                         }
                     });
         }
-        log.info("Done submitting files to fetcher {}", fetcherId);
+        LOG.info("Done submitting files to fetcher {}", fetcherId);
 
         requestStreamObserver.onCompleted();
 
         try {
             if (!countDownLatch.await(3, TimeUnit.MINUTES)) {
-                log.error("Timed out waiting for parse to complete");
+                LOG.error("Timed out waiting for parse to complete");
                 Assertions.fail("Timed out waiting for parsing to complete");
             }
         } catch (InterruptedException e) {
@@ -140,14 +142,14 @@ class FileSystemFetcherTest extends ExternalTestBase {
             assertAllFilesFetched(TEST_FOLDER.toPath(), successes, errors);
         } else {
             int totalProcessed = successes.size() + errors.size();
-            log.info("Processed {} documents (limit was {})", totalProcessed, 
maxDocs);
+            LOG.info("Processed {} documents (limit was {})", totalProcessed, 
maxDocs);
             Assertions.assertTrue(totalProcessed <= maxDocs, 
                 "Should not process more than " + maxDocs + " documents");
             Assertions.assertTrue(totalProcessed > 0, 
                 "Should have processed at least one document");
         }
         
-        log.info("Test completed successfully - {} successes, {} errors", 
+        LOG.info("Test completed successfully - {} successes, {} errors", 
             successes.size(), errors.size());
         } finally {
             channel.shutdown();
diff --git 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/HandlerTypeTest.java
 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/HandlerTypeTest.java
index f8e4799331..9cf6697389 100644
--- 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/HandlerTypeTest.java
+++ 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/filesystem/HandlerTypeTest.java
@@ -28,7 +28,6 @@ import java.util.concurrent.TimeUnit;
 
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
-import lombok.extern.slf4j.Slf4j;
 import org.awaitility.Awaitility;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
@@ -38,6 +37,8 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.tika.FetchAndParseReply;
 import org.apache.tika.FetchAndParseRequest;
@@ -58,11 +59,11 @@ import 
org.apache.tika.pipes.fetcher.fs.FileSystemFetcherConfig;
  * Example: {"basic-content-handler-factory": {"type": "HTML"}}
  */
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-@Slf4j
 @Tag("E2ETest")
 @DisabledOnOs(value = OS.WINDOWS, disabledReason = "exec:exec classpath 
exceeds Windows CreateProcess command-line length limit")
 class HandlerTypeTest {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(HandlerTypeTest.class);
     private static final File TEST_FOLDER = ExternalTestBase.TEST_FOLDER;
     private static final int GRPC_PORT = 
Integer.parseInt(System.getProperty("tika.e2e.grpcPort", "50052"));
 
@@ -75,7 +76,7 @@ class HandlerTypeTest {
             killProcessOnPort(3344);
             killProcessOnPort(10800);
         } catch (Exception e) {
-            log.debug("No orphaned processes to clean up: {}", e.getMessage());
+            LOG.debug("No orphaned processes to clean up: {}", e.getMessage());
         }
 
         ExternalTestBase.copyTestFixtures();
@@ -85,7 +86,7 @@ class HandlerTypeTest {
     @AfterAll
     void teardown() {
         if (localGrpcProcess != null) {
-            log.info("Stopping local gRPC server and child processes");
+            LOG.info("Stopping local gRPC server and child processes");
             localGrpcProcess.destroy();
             try {
                 if (!localGrpcProcess.waitFor(10, TimeUnit.SECONDS)) {
@@ -97,14 +98,14 @@ class HandlerTypeTest {
                 killProcessOnPort(3344);
                 killProcessOnPort(10800);
             } catch (Exception e) {
-                log.debug("Error during teardown: {}", e.getMessage());
+                LOG.debug("Error during teardown: {}", e.getMessage());
             }
-            log.info("Local gRPC server stopped");
+            LOG.info("Local gRPC server stopped");
         }
     }
 
     private static void startLocalGrpcServer() throws Exception {
-        log.info("Starting local tika-grpc server with Ignite config for 
HandlerType test");
+        LOG.info("Starting local tika-grpc server with Ignite config for 
HandlerType test");
 
         Path currentDir = Path.of("").toAbsolutePath();
         Path tikaRootDir = currentDir;
@@ -123,8 +124,8 @@ class HandlerTypeTest {
             throw new IllegalStateException("Config file not found: " + 
configFile);
         }
 
-        log.info("tika-grpc dir: {}", tikaGrpcDir);
-        log.info("Config file: {}", configFile);
+        LOG.info("tika-grpc dir: {}", tikaGrpcDir);
+        LOG.info("Config file: {}", configFile);
 
         String javaHome = System.getProperty("java.home");
         boolean isWindows = 
System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("win");
@@ -172,7 +173,7 @@ class HandlerTypeTest {
                     new InputStreamReader(localGrpcProcess.getInputStream(), 
StandardCharsets.UTF_8))) {
                 String line;
                 while ((line = reader.readLine()) != null) {
-                    log.info("tika-grpc: {}", line);
+                    LOG.info("tika-grpc: {}", line);
                     if (line.contains("Ignite server started") ||
                         (line.contains("Table") && line.contains("created 
successfully")) ||
                         line.contains("Server started, listening on")) {
@@ -183,7 +184,7 @@ class HandlerTypeTest {
                     }
                 }
             } catch (IOException e) {
-                log.error("Error reading server output", e);
+                LOG.error("Error reading server output", e);
             }
         });
         logThread.setDaemon(true);
@@ -230,7 +231,7 @@ class HandlerTypeTest {
             throw new RuntimeException("tika-grpc server with Ignite failed to 
start within timeout", e);
         }
 
-        log.info("HandlerType test server ready on port {}", GRPC_PORT);
+        LOG.info("HandlerType test server ready on port {}", GRPC_PORT);
     }
 
     private ManagedChannel getManagedChannel() {
@@ -258,10 +259,10 @@ class HandlerTypeTest {
                     .flatMap(h -> h.info().commandLine())
                     .orElse("");
                 if (!cmdLine.contains("tika") && !cmdLine.contains("TikaGrpc") 
&& !cmdLine.contains("ignite")) {
-                    log.debug("Skipping kill of PID {} on port {} — not a 
tika/ignite process", pid, port);
+                    LOG.debug("Skipping kill of PID {} on port {} — not a 
tika/ignite process", pid, port);
                     return;
                 }
-                log.info("Killing tika/ignite process {} on port {}", pid, 
port);
+                LOG.info("Killing tika/ignite process {} on port {}", pid, 
port);
                 new ProcessBuilder("kill", 
String.valueOf(pid)).start().waitFor(2, TimeUnit.SECONDS);
                 Thread.sleep(1000);
                 new ProcessBuilder("kill", "-9", 
String.valueOf(pid)).start().waitFor(2, TimeUnit.SECONDS);
@@ -280,7 +281,7 @@ class HandlerTypeTest {
                 }
             }
         } catch (Exception e) {
-            log.debug("Error checking parent process", e);
+            LOG.debug("Error checking parent process", e);
         }
         return false;
     }
@@ -300,7 +301,7 @@ class HandlerTypeTest {
                     .setFetcherType("file-system-fetcher")
                     
.setFetcherConfigJson(ExternalTestBase.OBJECT_MAPPER.writeValueAsString(config))
                     .build());
-            log.info("Fetcher created: {}", saveReply.getFetcherId());
+            LOG.info("Fetcher created: {}", saveReply.getFetcherId());
 
             // Parse sample.html requesting HTML output
             FetchAndParseReply htmlReply = 
blockingStub.fetchAndParse(FetchAndParseRequest.newBuilder()
@@ -309,13 +310,13 @@ class HandlerTypeTest {
                     .setParseContextJson("{\"basic-content-handler-factory\": 
{\"type\": \"HTML\"}}")
                     .build());
 
-            log.info("HTML parse status: {}", htmlReply.getStatus());
+            LOG.info("HTML parse status: {}", htmlReply.getStatus());
             Assertions.assertEquals("PARSE_SUCCESS", htmlReply.getStatus(),
                     "Parse should succeed with HTML handler type");
 
             String htmlContent = 
htmlReply.getFieldsMap().get("X-TIKA:content");
             Assertions.assertNotNull(htmlContent, "Content should be present 
in HTML response");
-            log.info("HTML content (first 200 chars): {}", 
htmlContent.substring(0, Math.min(200, htmlContent.length())));
+            LOG.info("HTML content (first 200 chars): {}", 
htmlContent.substring(0, Math.min(200, htmlContent.length())));
             Assertions.assertTrue(
                     htmlContent.contains("<html") || 
htmlContent.contains("<body") || htmlContent.contains("<p"),
                     "HTML handler should produce HTML markup, got: " + 
htmlContent);
@@ -327,13 +328,13 @@ class HandlerTypeTest {
                     .setParseContextJson("{\"basic-content-handler-factory\": 
{\"type\": \"TEXT\"}}")
                     .build());
 
-            log.info("Text parse status: {}", textReply.getStatus());
+            LOG.info("Text parse status: {}", textReply.getStatus());
             Assertions.assertEquals("PARSE_SUCCESS", textReply.getStatus(),
                     "Parse should succeed with TEXT handler type");
 
             String textContent = 
textReply.getFieldsMap().get("X-TIKA:content");
             Assertions.assertNotNull(textContent, "Content should be present 
in text response");
-            log.info("Text content (first 200 chars): {}", 
textContent.substring(0, Math.min(200, textContent.length())));
+            LOG.info("Text content (first 200 chars): {}", 
textContent.substring(0, Math.min(200, textContent.length())));
             Assertions.assertFalse(
                     textContent.contains("<html") || 
textContent.contains("<body"),
                     "TEXT handler should not produce HTML tags, got: " + 
textContent);
diff --git 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ignite/IgniteConfigStoreTest.java
 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ignite/IgniteConfigStoreTest.java
index eecfe2a0a2..347d13f1d0 100644
--- 
a/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ignite/IgniteConfigStoreTest.java
+++ 
b/tika-e2e-tests/tika-grpc/src/test/java/org/apache/tika/pipes/ignite/IgniteConfigStoreTest.java
@@ -33,7 +33,6 @@ import java.util.stream.Stream;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
-import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -42,6 +41,8 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.DockerComposeContainer;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.Wait;
@@ -57,11 +58,11 @@ import 
org.apache.tika.pipes.fetcher.fs.FileSystemFetcherConfig;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @Testcontainers
-@Slf4j
 @Tag("E2ETest")
 @DisabledOnOs(value = OS.WINDOWS, disabledReason = "Windows classpath length 
limit (CreateProcess error=206) exceeded by exec:exec with full Tika classpath")
 class IgniteConfigStoreTest {
-    
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(IgniteConfigStoreTest.class);
     private static final int MAX_STARTUP_TIMEOUT = 
ExternalTestBase.MAX_STARTUP_TIMEOUT;
     private static final File TEST_FOLDER = ExternalTestBase.TEST_FOLDER;
     private static final boolean USE_LOCAL_SERVER = 
Boolean.parseBoolean(System.getProperty("tika.e2e.useLocalServer", "true"));
@@ -78,7 +79,7 @@ class IgniteConfigStoreTest {
                 killProcessOnPort(3344);
                 killProcessOnPort(10800);
             } catch (Exception e) {
-                log.debug("No orphaned processes to clean up");
+                LOG.debug("No orphaned processes to clean up");
             }
         }
         
@@ -107,7 +108,7 @@ class IgniteConfigStoreTest {
     }
 
     private static void startLocalGrpcServer() throws Exception {
-        log.info("Starting local tika-grpc server using Maven");
+        LOG.info("Starting local tika-grpc server using Maven");
         
         Path currentDir = Path.of("").toAbsolutePath();
         Path tikaRootDir = currentDir;
@@ -136,9 +137,9 @@ class IgniteConfigStoreTest {
             throw new IllegalStateException("Config file not found: " + 
configFile);
         }
         
-        log.info("Tika root: {}", tikaRootDir);
-        log.info("Using tika-grpc from: {}", tikaGrpcDir);
-        log.info("Using config file: {}", configFile);
+        LOG.info("Tika root: {}", tikaRootDir);
+        LOG.info("Using tika-grpc from: {}", tikaGrpcDir);
+        LOG.info("Using config file: {}", configFile);
         
         // Use mvn exec:exec to run as external process (not exec:java which 
breaks ServiceLoader)
         String javaHome = System.getProperty("java.home");
@@ -188,7 +189,7 @@ class IgniteConfigStoreTest {
                     new 
java.io.InputStreamReader(localGrpcProcess.getInputStream(), 
java.nio.charset.StandardCharsets.UTF_8))) {
                 String line;
                 while ((line = reader.readLine()) != null) {
-                    log.info("tika-grpc: {}", line);
+                    LOG.info("tika-grpc: {}", line);
                     
                     if (line.contains("Ignite server started") ||
                         line.contains("Table") && line.contains("created 
successfully") ||
@@ -200,7 +201,7 @@ class IgniteConfigStoreTest {
                     }
                 }
             } catch (IOException e) {
-                log.error("Error reading server output", e);
+                LOG.error("Error reading server output", e);
             }
         });
         logThread.setDaemon(true);
@@ -217,7 +218,7 @@ class IgniteConfigStoreTest {
                     }
                     
                     if (!igniteReady) {
-                        log.debug("Waiting for Ignite to start...");
+                        LOG.debug("Waiting for Ignite to start...");
                         return false;
                     }
                     
@@ -239,10 +240,10 @@ class IgniteConfigStoreTest {
                                 
io.grpc.health.v1.HealthCheckResponse.ServingStatus.SERVING;
                             
                             if (serving) {
-                                log.info("gRPC server is healthy and 
serving!");
+                                LOG.info("gRPC server is healthy and 
serving!");
                                 return true;
                             } else {
-                                log.debug("gRPC server responding but not 
serving yet: {}", response.getStatus());
+                                LOG.debug("gRPC server responding but not 
serving yet: {}", response.getStatus());
                                 return false;
                             }
                         } finally {
@@ -252,18 +253,18 @@ class IgniteConfigStoreTest {
                     } catch (io.grpc.StatusRuntimeException e) {
                         if (e.getStatus().getCode() == 
io.grpc.Status.Code.UNIMPLEMENTED) {
                             // Health check not implemented, just verify 
channel works
-                            log.info("Health check not available, assuming 
server is ready");
+                            LOG.info("Health check not available, assuming 
server is ready");
                             return true;
                         }
-                        log.debug("gRPC server not ready yet: {}", 
e.getMessage());
+                        LOG.debug("gRPC server not ready yet: {}", 
e.getMessage());
                         return false;
                     } catch (Exception e) {
-                        log.debug("gRPC server not ready yet: {}", 
e.getMessage());
+                        LOG.debug("gRPC server not ready yet: {}", 
e.getMessage());
                         return false;
                     }
                 });
             
-            log.info("Both gRPC server and Ignite are ready!");
+            LOG.info("Both gRPC server and Ignite are ready!");
         } catch (org.awaitility.core.ConditionTimeoutException e) {
             if (localGrpcProcess.isAlive()) {
                 localGrpcProcess.destroyForcibly();
@@ -271,7 +272,7 @@ class IgniteConfigStoreTest {
             throw new RuntimeException("Local gRPC server or Ignite failed to 
start within timeout", e);
         }
         
-        log.info("Local tika-grpc server started successfully on port {}", 
GRPC_PORT);
+        LOG.info("Local tika-grpc server started successfully on port {}", 
GRPC_PORT);
     }
     
     
@@ -291,7 +292,7 @@ class IgniteConfigStoreTest {
                 .withStartupTimeout(Duration.of(MAX_STARTUP_TIMEOUT, 
ChronoUnit.SECONDS))
                 .withExposedService("tika-grpc", 50052,
                     Wait.forLogMessage(".*Server started.*\\n", 1))
-                .withLogConsumer("tika-grpc", new Slf4jLogConsumer(log));
+                .withLogConsumer("tika-grpc", new Slf4jLogConsumer(LOG));
         
         igniteComposeContainer.start();
     }
@@ -299,15 +300,15 @@ class IgniteConfigStoreTest {
     @AfterAll
     static void teardownIgnite() {
         if (USE_LOCAL_SERVER && localGrpcProcess != null) {
-            log.info("Stopping local gRPC server and all child processes");
+            LOG.info("Stopping local gRPC server and all child processes");
             
             try {
                 long mvnPid = localGrpcProcess.pid();
-                log.info("Maven process PID: {}", mvnPid);
+                LOG.info("Maven process PID: {}", mvnPid);
                 localGrpcProcess.destroy();
                 
                 if (!localGrpcProcess.waitFor(10, TimeUnit.SECONDS)) {
-                    log.warn("Process didn't stop gracefully, forcing 
shutdown");
+                    LOG.warn("Process didn't stop gracefully, forcing 
shutdown");
                     localGrpcProcess.destroyForcibly();
                     localGrpcProcess.waitFor(5, TimeUnit.SECONDS);
                 }
@@ -319,10 +320,10 @@ class IgniteConfigStoreTest {
                     killProcessOnPort(3344);
                     killProcessOnPort(10800);
                 } catch (Exception e) {
-                    log.debug("Error killing processes on ports (may already 
be stopped): {}", e.getMessage());
+                    LOG.debug("Error killing processes on ports (may already 
be stopped): {}", e.getMessage());
                 }
                 
-                log.info("Local gRPC server stopped");
+                LOG.info("Local gRPC server stopped");
             } catch (InterruptedException e) {
                 Thread.currentThread().interrupt();
                 localGrpcProcess.destroyForcibly();
@@ -345,7 +346,7 @@ class IgniteConfigStoreTest {
                 long myPid = ProcessHandle.current().pid();
                 
                 if (pid == myPid || isParentProcess(pid)) {
-                    log.debug("Skipping kill of PID {} on port {} (test 
process or parent)", pid, port);
+                    LOG.debug("Skipping kill of PID {} on port {} (test 
process or parent)", pid, port);
                     return;
                 }
                 
@@ -355,11 +356,11 @@ class IgniteConfigStoreTest {
                         .flatMap(h -> h.info().commandLine())
                         .orElse("");
                 if (!cmdLine.contains("tika") && !cmdLine.contains("TikaGrpc") 
&& !cmdLine.contains("ignite")) {
-                    log.debug("Skipping kill of PID {} on port {} — not a 
tika/ignite process: {}", pid, port, cmdLine);
+                    LOG.debug("Skipping kill of PID {} on port {} — not a 
tika/ignite process: {}", pid, port, cmdLine);
                     return;
                 }
                 
-                log.info("Found tika/ignite process {} on port {}, killing 
it", pid, port);
+                LOG.info("Found tika/ignite process {} on port {}, killing 
it", pid, port);
                 
                 ProcessBuilder killPb = new ProcessBuilder("kill", 
String.valueOf(pid));
                 Process killProcess = killPb.start();
@@ -385,7 +386,7 @@ class IgniteConfigStoreTest {
                 }
             }
         } catch (Exception e) {
-            log.debug("Error checking parent process", e);
+            LOG.debug("Error checking parent process", e);
         }
         return false;
     }
@@ -404,7 +405,7 @@ class IgniteConfigStoreTest {
             config.setBasePath(basePath);
             
             String configJson = 
ExternalTestBase.OBJECT_MAPPER.writeValueAsString(config);
-            log.info("Creating fetcher with Ignite ConfigStore (basePath={}): 
{}", basePath, configJson);
+            LOG.info("Creating fetcher with Ignite ConfigStore (basePath={}): 
{}", basePath, configJson);
             
             SaveFetcherReply saveReply = 
blockingStub.saveFetcher(SaveFetcherRequest
                     .newBuilder()
@@ -413,7 +414,7 @@ class IgniteConfigStoreTest {
                     .setFetcherConfigJson(configJson)
                     .build());
             
-            log.info("Fetcher saved to Ignite: {}", saveReply.getFetcherId());
+            LOG.info("Fetcher saved to Ignite: {}", saveReply.getFetcherId());
 
             List<FetchAndParseReply> successes = 
Collections.synchronizedList(new ArrayList<>());
             List<FetchAndParseReply> errors = Collections.synchronizedList(new 
ArrayList<>());
@@ -423,7 +424,7 @@ class IgniteConfigStoreTest {
                     requestStreamObserver = 
tikaStub.fetchAndParseBiDirectionalStreaming(new StreamObserver<>() {
                 @Override
                 public void onNext(FetchAndParseReply fetchAndParseReply) {
-                    log.debug("Reply from fetch-and-parse - key={}, 
status={}", 
+                    LOG.debug("Reply from fetch-and-parse - key={}, 
status={}", 
                         fetchAndParseReply.getFetchKey(), 
fetchAndParseReply.getStatus());
                     if 
("FETCH_AND_PARSE_EXCEPTION".equals(fetchAndParseReply.getStatus())) {
                         errors.add(fetchAndParseReply);
@@ -434,20 +435,20 @@ class IgniteConfigStoreTest {
 
                 @Override
                 public void onError(Throwable throwable) {
-                    log.error("Received an error", throwable);
+                    LOG.error("Received an error", throwable);
                     Assertions.fail(throwable);
                     countDownLatch.countDown();
                 }
 
                 @Override
                 public void onCompleted() {
-                    log.info("Finished streaming fetch and parse replies");
+                    LOG.info("Finished streaming fetch and parse replies");
                     countDownLatch.countDown();
                 }
             });
 
             int maxDocs = 
Integer.parseInt(System.getProperty("corpus.numDocs", "-1"));
-            log.info("Document limit: {}", maxDocs == -1 ? "unlimited" : 
maxDocs);
+            LOG.info("Document limit: {}", maxDocs == -1 ? "unlimited" : 
maxDocs);
             
             try (Stream<Path> paths = Files.walk(TEST_FOLDER.toPath())) {
                 Stream<Path> fileStream = paths
@@ -473,13 +474,13 @@ class IgniteConfigStoreTest {
                     }
                 });
             }
-            log.info("Done submitting files to Ignite-backed fetcher {}", 
fetcherId);
+            LOG.info("Done submitting files to Ignite-backed fetcher {}", 
fetcherId);
 
             requestStreamObserver.onCompleted();
 
             try {
                 if (!countDownLatch.await(3, TimeUnit.MINUTES)) {
-                    log.error("Timed out waiting for parse to complete");
+                    LOG.error("Timed out waiting for parse to complete");
                     Assertions.fail("Timed out waiting for parsing to 
complete");
                 }
             } catch (InterruptedException e) {
@@ -491,7 +492,7 @@ class IgniteConfigStoreTest {
                 ExternalTestBase.assertAllFilesFetched(TEST_FOLDER.toPath(), 
successes, errors);
             } else {
                 int totalProcessed = successes.size() + errors.size();
-                log.info("Processed {} documents with Ignite ConfigStore 
(limit was {})", 
+                LOG.info("Processed {} documents with Ignite ConfigStore 
(limit was {})", 
                     totalProcessed, maxDocs);
                 Assertions.assertTrue(totalProcessed <= maxDocs, 
                     "Should not process more than " + maxDocs + " documents");
@@ -499,7 +500,7 @@ class IgniteConfigStoreTest {
                     "Should have processed at least one document");
             }
             
-            log.info("Ignite ConfigStore test completed successfully - {} 
successes, {} errors", 
+            LOG.info("Ignite ConfigStore test completed successfully - {} 
successes, {} errors", 
                 successes.size(), errors.size());
         } finally {
             channel.shutdown();
diff --git a/tika-parent/pom.xml b/tika-parent/pom.xml
index 20037da557..248057a48f 100644
--- a/tika-parent/pom.xml
+++ b/tika-parent/pom.xml
@@ -397,7 +397,6 @@
     <kotlin-stdlib.version>2.4.0</kotlin-stdlib.version>
     <libpst.version>0.9.3</libpst.version>
     <log4j2.version>2.26.1</log4j2.version>
-    <lombok.version>1.18.46</lombok.version>
     <!-- can't update to 10, needs jdk21 -->
     <lucene.version>9.12.3</lucene.version>
     <maven.plugin.annotations.version>3.15.2</maven.plugin.annotations.version>


Reply via email to