diff --git a/jOOQ/src/main/java/org/jooq/FilePattern.java b/jOOQ/src/main/java/org/jooq/FilePattern.java index 2deb05dcc1..5093f49327 100644 --- a/jOOQ/src/main/java/org/jooq/FilePattern.java +++ b/jOOQ/src/main/java/org/jooq/FilePattern.java @@ -41,7 +41,7 @@ import static java.util.Comparator.naturalOrder; import static org.jooq.FilePattern.Sort.SEMANTIC; import java.io.File; -import java.net.URISyntaxException; +import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -224,8 +224,14 @@ public final class FilePattern { if (url != null) { log.info("Reading from classpath: " + pattern); - load0(new File(url.toURI()), loader); - loaded = true; + // [#11637] Avoid working with File to support classpath resources + // inside of nested jar files. + try (InputStream is = FilePattern.class.getResourceAsStream(pattern)) { + + // Cannot accept a Source based on an InputStream if using FilePattern::collect + loader.accept(Source.of(Source.of(is).readString())); + loaded = true; + } } else { file = new File(pattern); @@ -253,11 +259,6 @@ public final class FilePattern { } } } - - // It is quite unlikely that a classpath URL doesn't produce a valid URI - catch (URISyntaxException e) { - throw new RuntimeException(e); - } catch (java.io.IOException e) { throw new IOException("Error while loading pattern", e); }