in src/main/java/org/apache/maven/plugins/jarsigner/JarsignerSignMojo.java [329:353]
protected void processArchives(List<File> archives) throws MojoExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<Future<Void>> futures = archives.stream()
.map(file -> executor.submit((Callable<Void>) () -> {
processArchive(file);
return null; // Return dummy value to conform with Void type
}))
.collect(Collectors.toList());
try {
for (Future<Void> future : futures) {
future.get(); // Wait for completion. Result ignored, but may raise any Exception
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new MojoExecutionException("Thread interrupted while waiting for jarsigner to complete", e);
} catch (ExecutionException e) {
if (e.getCause() instanceof MojoExecutionException) {
throw (MojoExecutionException) e.getCause();
}
throw new MojoExecutionException("Error processing archives", e);
} finally {
// Shutdown of thread pool. If an Exception occurred, remaining threads will be aborted "best effort"
executor.shutdownNow();
}
}