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

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


The following commit(s) were added to refs/heads/main by this push:
     new 3c7adb48d53c fix(dsl): camel jbang resource leaks
3c7adb48d53c is described below

commit 3c7adb48d53c90c14d324eff20f0f344fabc29e6
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Nov 27 09:06:35 2025 +0100

    fix(dsl): camel jbang resource leaks
    
    Closing various streams left opened. Additionally some other dead code 
removal and logging where missing.
---
 .../camel/jbang/console/SourceDirDevConsole.java   |  9 ++-
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  8 +-
 .../apache/camel/dsl/jbang/core/commands/Init.java | 50 +++++++------
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 39 ++--------
 .../camel/dsl/jbang/core/commands/RunHelper.java   | 17 ++---
 .../core/commands/infra/InfraBaseCommand.java      | 26 ++++---
 .../dsl/jbang/core/commands/infra/InfraLog.java    | 26 +++----
 .../dsl/jbang/core/commands/infra/InfraRun.java    | 32 ++++----
 .../dsl/jbang/core/commands/update/UpdateRun.java  | 14 ++--
 .../camel/dsl/jbang/core/common/CatalogLoader.java |  6 ++
 .../camel/dsl/jbang/core/common/PathUtils.java     |  5 +-
 .../camel/dsl/jbang/core/common/PluginHelper.java  |  5 ++
 .../commands/generate/CodeSchemaGenerator.java     | 68 ++++++++---------
 .../core/commands/test/TestPluginExporter.java     | 86 +++++++++++-----------
 14 files changed, 196 insertions(+), 195 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
 
b/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
index d91a2acfc366..0210e576f26e 100644
--- 
a/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
+++ 
b/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
@@ -25,6 +25,7 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.console.ConsoleHelper;
@@ -64,8 +65,8 @@ public class SourceDirDevConsole extends AbstractDevConsole {
             // list files in this directory
             Path dir = Paths.get(reload.getFolder());
             if (Files.exists(dir) && Files.isDirectory(dir)) {
-                try {
-                    List<Path> files = 
Files.list(dir).collect(Collectors.toList());
+                try (Stream<Path> streams = Files.list(dir)) {
+                    List<Path> files = streams.collect(Collectors.toList());
                     if (!files.isEmpty()) {
                         sb.append("Files:\n");
                         // sort files by name (ignore case)
@@ -131,8 +132,8 @@ public class SourceDirDevConsole extends AbstractDevConsole 
{
             // list files in this directory
             Path dir = Paths.get(reload.getFolder());
             if (Files.exists(dir) && Files.isDirectory(dir)) {
-                try {
-                    List<Path> files = 
Files.list(dir).collect(Collectors.toList());
+                try (Stream<Path> streams = Files.list(dir)) {
+                    List<Path> files = streams.collect(Collectors.toList());
                     if (!files.isEmpty()) {
                         // sort files by name (ignore case)
                         files.sort((o1, o2) -> 
o1.getFileName().toString().compareToIgnoreCase(o2.getFileName().toString()));
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 0f84ef2cd492..c0e8ae052d5e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -45,6 +45,7 @@ import java.util.jar.JarFile;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.commands.catalog.KameletCatalogHelper;
@@ -1216,9 +1217,8 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
     }
 
     protected void copyApplicationPropertiesFiles(Path srcResourcesDir) throws 
Exception {
-        try {
-            Files.list(exportBaseDir)
-                    .filter(p -> Files.isRegularFile(p))
+        try (Stream<Path> files = Files.list(exportBaseDir)) {
+            files.filter(p -> Files.isRegularFile(p))
                     .filter(p -> {
                         String fileName = p.getFileName().toString();
                         String ext = FileUtil.onlyExt(fileName);
@@ -1246,7 +1246,7 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                         }
                     });
         } catch (IOException e) {
-            // Ignore
+            printer().printErr("Error copying application properties due to: " 
+ e.getMessage());
         }
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index d12c9224ef9c..30e4f1174211 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -248,18 +248,19 @@ public class Init extends CamelCommand {
             }
 
             CamelContext tiny = new DefaultCamelContext();
-            GitHubResourceResolver resolver = new GitHubResourceResolver();
-            resolver.setCamelContext(tiny);
-            for (String u : all.toString().split(",")) {
-                Resource resource = resolver.resolve(u);
-                if (!resource.exists()) {
-                    throw new ResourceDoesNotExist(resource);
-                }
-                String loc = resource.getLocation();
-                String name = FileUtil.stripPath(loc);
-                Path targetPath = Paths.get(directory, name);
-                try (OutputStream os = Files.newOutputStream(targetPath)) {
-                    IOUtils.copy(resource.getInputStream(), os);
+            try (GitHubResourceResolver resolver = new 
GitHubResourceResolver()) {
+                resolver.setCamelContext(tiny);
+                for (String u : all.toString().split(",")) {
+                    Resource resource = resolver.resolve(u);
+                    if (!resource.exists()) {
+                        throw new ResourceDoesNotExist(resource);
+                    }
+                    String loc = resource.getLocation();
+                    String name = FileUtil.stripPath(loc);
+                    Path targetPath = Paths.get(directory, name);
+                    try (OutputStream os = Files.newOutputStream(targetPath)) {
+                        IOUtils.copy(resource.getInputStream(), os);
+                    }
                 }
             }
         }
@@ -284,18 +285,19 @@ public class Init extends CamelCommand {
             }
 
             CamelContext tiny = new DefaultCamelContext();
-            GistResourceResolver resolver = new GistResourceResolver();
-            resolver.setCamelContext(tiny);
-            for (String u : all.toString().split(",")) {
-                Resource resource = resolver.resolve(u);
-                if (!resource.exists()) {
-                    throw new ResourceDoesNotExist(resource);
-                }
-                String loc = resource.getLocation();
-                String name = FileUtil.stripPath(loc);
-                Path targetPath = Paths.get(directory, name);
-                try (OutputStream os = Files.newOutputStream(targetPath)) {
-                    IOUtils.copy(resource.getInputStream(), os);
+            try (GistResourceResolver resolver = new GistResourceResolver()) {
+                resolver.setCamelContext(tiny);
+                for (String u : all.toString().split(",")) {
+                    Resource resource = resolver.resolve(u);
+                    if (!resource.exists()) {
+                        throw new ResourceDoesNotExist(resource);
+                    }
+                    String loc = resource.getLocation();
+                    String name = FileUtil.stripPath(loc);
+                    Path targetPath = Paths.get(directory, name);
+                    try (OutputStream os = Files.newOutputStream(targetPath)) {
+                        IOUtils.copy(resource.getInputStream(), os);
+                    }
                 }
             }
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index dcde4ffc5ae8..1f1248dbed3a 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -38,6 +38,7 @@ import java.util.function.Supplier;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
@@ -536,10 +537,9 @@ public class Run extends CamelCommand {
         if (!empty && autoDetectFiles) {
             if (sourceDir != null) {
                 // silent-run then auto-detect all initial files for source-dir
-                try {
-                    Path sourceDirPath = Paths.get(sourceDir);
-                    Files.list(sourceDirPath)
-                            .forEach(p -> 
files.add(sourceDirPath.resolve(p.getFileName()).toString()));
+                Path sourceDirPath = Paths.get(sourceDir);
+                try (Stream<Path> paths = Files.list(sourceDirPath)) {
+                    paths.forEach(p -> 
files.add(sourceDirPath.resolve(p.getFileName()).toString()));
                 } catch (IOException e) {
                     // Ignore
                 }
@@ -2066,10 +2066,9 @@ public class Run extends CamelCommand {
     }
 
     protected static void removeDir(Path directory) {
-        try {
-            if (Files.exists(directory)) {
-                Files.walk(directory)
-                        .sorted(java.util.Comparator.reverseOrder())
+        if (Files.exists(directory)) {
+            try (Stream<Path> files = Files.walk(directory)) {
+                files.sorted(java.util.Comparator.reverseOrder())
                         .forEach(path -> {
                             try {
                                 Files.deleteIfExists(path);
@@ -2082,29 +2081,7 @@ public class Run extends CamelCommand {
                                 }
                             }
                         });
-            }
-        } catch (IOException e) {
-            // Ignore
-        }
-    }
-
-    private static void delete(Path path) {
-        try {
-            if (!Files.deleteIfExists(path)) {
-                try {
-                    Thread.sleep(10);
-                } catch (InterruptedException ex) {
-                    Thread.currentThread().interrupt();
-                }
-                if (!Files.deleteIfExists(path)) {
-                    path.toFile().deleteOnExit();
-                }
-            }
-        } catch (IOException e) {
-            // Fallback to deleteOnExit
-            try {
-                path.toFile().deleteOnExit();
-            } catch (Exception ex) {
+            } catch (IOException e) {
                 // Ignore
             }
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
index 0cdc018b4831..4cdf6dcd3c85 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
@@ -287,15 +287,14 @@ public final class RunHelper {
      */
     public static void dirToFiles(String dir, List<String> files) {
         files.clear();
-        try {
-            Files.list(Paths.get(dir))
-                    .filter(p -> {
-                        try {
-                            return Files.isRegularFile(p) && 
!Files.isHidden(p);
-                        } catch (IOException e) {
-                            return false;
-                        }
-                    })
+        try (Stream<Path> paths = Files.list(Paths.get(dir))) {
+            paths.filter(p -> {
+                try {
+                    return Files.isRegularFile(p) && !Files.isHidden(p);
+                } catch (IOException e) {
+                    return false;
+                }
+            })
                     .forEach(f -> files.add(dir + "/" + f.getFileName()));
         } catch (IOException e) {
             // Ignore
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
index cc22ac3d7b7f..ee92d66eb8c3 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
@@ -33,6 +33,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.MapperFeature;
@@ -86,18 +87,19 @@ public abstract class InfraBaseCommand extends CamelCommand 
{
 
         final String pattern = name;
 
-        List<Path> pidFiles = Files.list(CommandLineHelper.getCamelDir())
-                .filter(p -> {
-                    var n = p.getFileName().toString();
-                    return n.startsWith("infra-") && n.endsWith(".json");
-                })
-                .toList();
-        for (Path pidFile : pidFiles) {
-            String fn = pidFile.getFileName().toString();
-            String sn = fn.substring(fn.indexOf("-") + 1, fn.lastIndexOf('-'));
-            String pid = fn.substring(fn.lastIndexOf("-") + 1, 
fn.lastIndexOf('.'));
-            if (pid.equals(pattern) || PatternHelper.matchPattern(sn, 
pattern)) {
-                pids.put(Long.valueOf(pid), pidFile);
+        try (Stream<Path> files = Files.list(CommandLineHelper.getCamelDir())) 
{
+            List<Path> pidFiles = files.filter(p -> {
+                var n = p.getFileName().toString();
+                return n.startsWith("infra-") && n.endsWith(".json");
+            })
+                    .toList();
+            for (Path pidFile : pidFiles) {
+                String fn = pidFile.getFileName().toString();
+                String sn = fn.substring(fn.indexOf("-") + 1, 
fn.lastIndexOf('-'));
+                String pid = fn.substring(fn.lastIndexOf("-") + 1, 
fn.lastIndexOf('.'));
+                if (pid.equals(pattern) || PatternHelper.matchPattern(sn, 
pattern)) {
+                    pids.put(Long.valueOf(pid), pidFile);
+                }
             }
         }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
index 8b83dc2de913..050566dba05e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.stream.Stream;
 
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
@@ -53,12 +54,11 @@ public class InfraLog extends InfraBaseCommand {
         List<Future<?>> futures = new ArrayList<>();
         if (serviceName == null || serviceName.isEmpty()) {
             // Log everything
-            try {
-                List<Path> logFiles = 
Files.list(CommandLineHelper.getCamelDir())
-                        .filter(p -> {
-                            String name = p.getFileName().toString();
-                            return name.startsWith("infra-") && 
name.endsWith(".log");
-                        })
+            try (Stream<Path> files = 
Files.list(CommandLineHelper.getCamelDir())) {
+                List<Path> logFiles = files.filter(p -> {
+                    String name = p.getFileName().toString();
+                    return name.startsWith("infra-") && name.endsWith(".log");
+                })
                         .toList();
 
                 for (Path logFile : logFiles) {
@@ -77,12 +77,11 @@ public class InfraLog extends InfraBaseCommand {
             String alias = serviceName.get(0);
 
             Path logFile = null;
-            try {
-                logFile = Files.list(CommandLineHelper.getCamelDir())
-                        .filter(p -> {
-                            String name = p.getFileName().toString();
-                            return name.startsWith("infra-" + alias + "-") && 
name.endsWith(".log");
-                        })
+            try (Stream<Path> files = 
Files.list(CommandLineHelper.getCamelDir())) {
+                logFile = files.filter(p -> {
+                    String name = p.getFileName().toString();
+                    return name.startsWith("infra-" + alias + "-") && 
name.endsWith(".log");
+                })
                         .findFirst()
                         .orElse(null);
             } catch (IOException e) {
@@ -150,10 +149,9 @@ public class InfraLog extends InfraBaseCommand {
         @Override
         public void init(Tailer tailer) {
             this.self = tailer;
-            try {
+            try (ReversedLinesFileReader fileReader = new 
ReversedLinesFileReader(tailer.getFile())) {
                 StringBuilder sb = new StringBuilder();
                 int linesToRead = 50;
-                ReversedLinesFileReader fileReader = new 
ReversedLinesFileReader(tailer.getFile());
                 for (int i = 0; i < linesToRead; i++) {
                     String line = fileReader.readLine();
                     if (line == null) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
index ae343a0df154..41fab4f40af5 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
@@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.common.Printer;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.main.download.DependencyDownloaderClassLoader;
 import org.apache.camel.main.download.MavenDependencyDownloader;
@@ -134,7 +135,7 @@ public class InfraRun extends InfraBaseCommand {
 
     protected Integer doRun(String testService, String 
testServiceImplementation, TestInfraService testInfraService)
             throws Exception {
-        DependencyDownloaderClassLoader cl = 
getDependencyDownloaderClassLoader(testInfraService);
+        DependencyDownloaderClassLoader cl = 
getDependencyDownloaderClassLoader(testInfraService, printer());
 
         // Update the class loader
         Thread.currentThread().setContextClassLoader(cl);
@@ -288,21 +289,24 @@ public class InfraRun extends InfraBaseCommand {
     }
 
     private static DependencyDownloaderClassLoader 
getDependencyDownloaderClassLoader(
-            TestInfraService testInfraService) {
+            TestInfraService testInfraService, Printer printer) {
         DependencyDownloaderClassLoader cl = new 
DependencyDownloaderClassLoader(InfraRun.class.getClassLoader());
 
-        MavenDependencyDownloader downloader = new MavenDependencyDownloader();
-        downloader.setClassLoader(cl);
-        downloader.start();
-        // download required camel-test-infra-* dependency
-        downloader.downloadDependency(testInfraService.groupId(),
-                testInfraService.artifactId(),
-                testInfraService.version(), true);
-
-        MavenArtifact ma = 
downloader.downloadArtifact(testInfraService.groupId(),
-                testInfraService.artifactId(),
-                testInfraService.version());
-        cl.addFile(ma.getFile());
+        try (MavenDependencyDownloader downloader = new 
MavenDependencyDownloader()) {
+            downloader.setClassLoader(cl);
+            downloader.start();
+            // download required camel-test-infra-* dependency
+            downloader.downloadDependency(testInfraService.groupId(),
+                    testInfraService.artifactId(),
+                    testInfraService.version(), true);
+
+            MavenArtifact ma = 
downloader.downloadArtifact(testInfraService.groupId(),
+                    testInfraService.artifactId(),
+                    testInfraService.version());
+            cl.addFile(ma.getFile());
+        } catch (Exception e) {
+            printer.printErr(e);
+        }
         return cl;
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
index a31d302f8257..c2b16665cdba 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
@@ -24,6 +24,7 @@ import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
 
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
@@ -57,13 +58,14 @@ public class UpdateRun extends CamelCommand {
      */
     @Override
     public Integer doCall() throws Exception {
-        // Check if the current directory contains a Maven project (i.e., a 
pom.xml file)
-        if (Files.list(Path.of("."))
-                .noneMatch(f -> f.getFileName().toString().equals("pom.xml"))) 
{
-            printer().println("No Maven Project found in the current 
directory, " +
-                              "please execute camel upgrade run command in the 
directory containing the Maven project to update");
+        try (Stream<Path> files = Files.list(Path.of("."))) {
+            // Check if the current directory contains a Maven project (i.e., 
a pom.xml file)
+            if (files.noneMatch(f -> 
f.getFileName().toString().equals("pom.xml"))) {
+                printer().println("No Maven Project found in the current 
directory, " +
+                                  "please execute camel upgrade run command in 
the directory containing the Maven project to update");
 
-            return -1;
+                return -1;
+            }
         }
 
         List<String> command = new ArrayList<>();
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
index 56432636f791..d7c91fb88563 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
@@ -85,6 +85,7 @@ public final class CatalogLoader {
             answer.enableCache();
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return answer;
@@ -145,6 +146,7 @@ public final class CatalogLoader {
             answer.enableCache();
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return answer;
@@ -225,6 +227,7 @@ public final class CatalogLoader {
             answer.enableCache();
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return answer;
@@ -252,6 +255,7 @@ public final class CatalogLoader {
             }
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return null;
@@ -280,6 +284,7 @@ public final class CatalogLoader {
             }
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return null;
@@ -306,6 +311,7 @@ public final class CatalogLoader {
             }
         } finally {
             downloader.stop();
+            downloader.close();
         }
 
         return null;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
index 59780c8218ce..1840bd20712c 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
@@ -98,9 +98,8 @@ public final class PathUtils {
             return false;
         }
 
-        try {
-            Files.walk(directory)
-                    .sorted(java.util.Comparator.reverseOrder())
+        try (Stream<Path> paths = Files.walk(directory)) {
+            paths.sorted(java.util.Comparator.reverseOrder())
                     .forEach(path -> {
                         try {
                             Files.deleteIfExists(path);
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
index f590afd90401..76281564eb1c 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
@@ -215,6 +215,11 @@ public final class PluginHelper {
             throw new RuntimeCamelException(String.format("Failed to read the 
file %s.", path), e);
         } finally {
             downloader.stop();
+            try {
+                downloader.close();
+            } catch (Exception e) {
+                printer.printErr(e);
+            }
             IOHelper.close(in);
         }
         return instance;
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
 
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
index 2a2c944a857a..2d7f6d26ef23 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
@@ -114,15 +114,14 @@ public class CodeSchemaGenerator extends CamelCommand {
             SchemaGeneratorConfig config = 
createSchemaGeneratorConfig(jacksonModule);
             SchemaGenerator generator = new SchemaGenerator(config);
 
-            // Download dependencies and create class loader
-            DependencyDownloaderClassLoader cl = 
getDependencyDownloaderClassLoader(camelComponent, camelVersion, verbose);
-            if (cl == null) {
-                return 1; // Error already reported
-            }
-
             // Set context class loader
             ClassLoader originalClassLoader = 
Thread.currentThread().getContextClassLoader();
-            try {
+            // Download dependencies and create class loader
+            try (DependencyDownloaderClassLoader cl
+                    = getDependencyDownloaderClassLoader(camelComponent, 
camelVersion, verbose)) {
+                if (cl == null) {
+                    return 1; // Error already reported
+                }
                 Thread.currentThread().setContextClassLoader(cl);
 
                 // Load the target class
@@ -177,7 +176,8 @@ public class CodeSchemaGenerator extends CamelCommand {
     }
 
     /**
-     * Downloads dependencies and creates a class loader for the specified 
Camel component.
+     * Downloads dependencies and creates a class loader for the specified 
Camel component. NOTE: Make sure to close the
+     * stream after using it!
      *
      * @param  camelComponent The name of the Camel component
      * @param  version        The Camel version to use
@@ -195,36 +195,38 @@ public class CodeSchemaGenerator extends CamelCommand {
             DependencyDownloaderClassLoader cl = new 
DependencyDownloaderClassLoader(
                     CodeSchemaGenerator.class.getClassLoader());
 
-            MavenDependencyDownloader downloader = new 
MavenDependencyDownloader();
-            downloader.setClassLoader(cl);
-            downloader.setDownload(download);
-            downloader.setRepositories(repositories);
-            downloader.start();
+            try (MavenDependencyDownloader downloader = new 
MavenDependencyDownloader()) {
+                downloader.setClassLoader(cl);
+                downloader.setDownload(download);
+                downloader.setRepositories(repositories);
+                downloader.start();
 
-            if (verbose) {
-                printer().println("Downloading artifacts for camel-" + 
camelComponent + ":" + version);
-            }
+                if (verbose) {
+                    printer().println("Downloading artifacts for camel-" + 
camelComponent + ":" + version);
+                }
 
-            List<MavenArtifact> artifacts = downloader.downloadArtifacts(
-                    "org.apache.camel",
-                    "camel-" + camelComponent,
-                    version,
-                    true);
-
-            if (artifacts == null || artifacts.isEmpty()) {
-                printer().printErr(
-                        "Error: No artifacts found for component 'camel-" + 
camelComponent + "' version '" + version + "'");
-                printer().printErr("Please verify that the component name is 
correct and the version exists.");
-                printer().printErr("Available components can be found at: 
https://camel.apache.org/components/";);
-                return null;
-            }
+                List<MavenArtifact> artifacts = downloader.downloadArtifacts(
+                        "org.apache.camel",
+                        "camel-" + camelComponent,
+                        version,
+                        true);
+
+                if (artifacts == null || artifacts.isEmpty()) {
+                    printer().printErr(
+                            "Error: No artifacts found for component 'camel-" 
+ camelComponent + "' version '" + version + "'");
+                    printer().printErr("Please verify that the component name 
is correct and the version exists.");
+                    printer().printErr("Available components can be found at: 
https://camel.apache.org/components/";);
+                    return null;
+                }
 
-            if (verbose) {
-                printer().println("Downloaded " + artifacts.size() + " 
artifact(s)");
-                artifacts.forEach(artifact -> printer().println("  - " + 
artifact.getFile().getName()));
+                if (verbose) {
+                    printer().println("Downloaded " + artifacts.size() + " 
artifact(s)");
+                    artifacts.forEach(artifact -> printer().println("  - " + 
artifact.getFile().getName()));
+                }
+
+                artifacts.forEach(artifact -> cl.addFile(artifact.getFile()));
             }
 
-            artifacts.forEach(artifact -> cl.addFile(artifact.getFile()));
             return cl;
 
         } catch (Exception e) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
 
b/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
index a10a8d0ea6a9..2bf527e832d5 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
@@ -30,6 +30,7 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.dsl.jbang.core.commands.ExportHelper;
 import org.apache.camel.dsl.jbang.core.common.PluginExporter;
@@ -134,55 +135,58 @@ public class TestPluginExporter implements PluginExporter 
{
             ExportHelper.safeCopy(testProfile, 
srcTestResourcesDir.resolve("application.test.properties"), true);
         }
 
-        // Add all supported test sources
-        Set<Path> testSources = Files.list(testDir)
-                .filter(path -> !path.getFileName().toString().startsWith("."))
-                .filter(path -> {
-                    String ext = 
FileUtils.getFileExtension(path.getFileName().toString());
-                    return CitrusSettings.getTestFileNamePattern(ext)
-                            .stream()
-                            .map(Pattern::compile)
-                            .anyMatch(pattern -> 
pattern.matcher(path.getFileName().toString()).matches());
-                }).collect(Collectors.toSet());
-
-        for (Path testSource : testSources) {
-            String ext = 
FileUtils.getFileExtension(testSource.getFileName().toString());
-            if (ext.equals("java")) {
-                Path javaSource;
-                if (packageName != null) {
-                    javaSource = 
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + 
testSource.getFileName());
-                } else {
-                    javaSource = 
srcTestSrcDir.resolve(testSource.getFileName());
-                }
+        try (Stream<Path> paths = Files.list(testDir)) {
+            // Add all supported test sources
+            Set<Path> testSources = paths
+                    .filter(path -> 
!path.getFileName().toString().startsWith("."))
+                    .filter(path -> {
+                        String ext = 
FileUtils.getFileExtension(path.getFileName().toString());
+                        return CitrusSettings.getTestFileNamePattern(ext)
+                                .stream()
+                                .map(Pattern::compile)
+                                .anyMatch(pattern -> 
pattern.matcher(path.getFileName().toString()).matches());
+                    }).collect(Collectors.toSet());
+
+            for (Path testSource : testSources) {
+                String ext = 
FileUtils.getFileExtension(testSource.getFileName().toString());
+                if (ext.equals("java")) {
+                    Path javaSource;
+                    if (packageName != null) {
+                        javaSource = 
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + 
testSource.getFileName());
+                    } else {
+                        javaSource = 
srcTestSrcDir.resolve(testSource.getFileName());
+                    }
 
-                ExportHelper.safeCopy(new ByteArrayInputStream(
-                        
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), javaSource);
-            } else {
-                Path resource = 
srcTestResourcesDir.resolve(testSource.getFileName());
-                ExportHelper.safeCopy(new ByteArrayInputStream(
-                        
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), resource);
-
-                String javaClassName = 
getJavaClassName(FileUtils.getBaseName(testSource.getFileName().toString()));
-                Path javaSource;
-                if (packageName != null) {
-                    javaSource = 
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + javaClassName 
+ ".java");
+                    ExportHelper.safeCopy(new ByteArrayInputStream(
+                            
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), javaSource);
                 } else {
-                    javaSource = srcTestSrcDir.resolve(javaClassName + 
".java");
-                }
+                    Path resource = 
srcTestResourcesDir.resolve(testSource.getFileName());
+                    ExportHelper.safeCopy(new ByteArrayInputStream(
+                            
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), resource);
+
+                    String javaClassName = 
getJavaClassName(FileUtils.getBaseName(testSource.getFileName().toString()));
+                    Path javaSource;
+                    if (packageName != null) {
+                        javaSource = 
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + javaClassName 
+ ".java");
+                    } else {
+                        javaSource = srcTestSrcDir.resolve(javaClassName + 
".java");
+                    }
 
-                try (InputStream is = 
TestPlugin.class.getClassLoader().getResourceAsStream("templates/junit-test.tmpl"))
 {
-                    String context = IOHelper.loadText(is);
+                    try (InputStream is = 
TestPlugin.class.getClassLoader().getResourceAsStream("templates/junit-test.tmpl"))
 {
+                        String context = IOHelper.loadText(is);
 
-                    context = context.replaceAll("\\{\\{ \\.PackageDeclaration 
}}", getPackageDeclaration(packageName));
-                    context = context.replaceAll("\\{\\{ \\.Type }}", ext);
-                    context = context.replaceAll("\\{\\{ \\.Name }}", 
javaClassName);
-                    context = context.replaceAll("\\{\\{ \\.MethodName }}", 
StringHelper.decapitalize(javaClassName));
-                    context = context.replaceAll("\\{\\{ \\.ResourcePath }}", 
testSource.getFileName().toString());
+                        context = context.replaceAll("\\{\\{ 
\\.PackageDeclaration }}", getPackageDeclaration(packageName));
+                        context = context.replaceAll("\\{\\{ \\.Type }}", ext);
+                        context = context.replaceAll("\\{\\{ \\.Name }}", 
javaClassName);
+                        context = context.replaceAll("\\{\\{ \\.MethodName 
}}", StringHelper.decapitalize(javaClassName));
+                        context = context.replaceAll("\\{\\{ \\.ResourcePath 
}}", testSource.getFileName().toString());
 
-                    ExportHelper.safeCopy(new 
ByteArrayInputStream(context.getBytes(StandardCharsets.UTF_8)), javaSource);
+                        ExportHelper.safeCopy(new 
ByteArrayInputStream(context.getBytes(StandardCharsets.UTF_8)), javaSource);
+                    }
                 }
             }
         }
+
     }
 
     /**


Reply via email to