diff --git a/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/EffectiveConfig.java b/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/EffectiveConfig.java index 3e03f70678474..10bcd6bcabb3f 100644 --- a/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/EffectiveConfig.java +++ b/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/EffectiveConfig.java @@ -7,6 +7,8 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -139,21 +141,26 @@ List applicationPropsSources() { static void configSourcesForApplicationProperties(Set sourceDirectories, Consumer sourceUrls, Consumer configSourceConsumer, int ordinal, String[] fileExtensions) { - URL[] resourceUrls = sourceDirectories.stream().map(File::toURI) - .map(u -> { - try { - return u.toURL(); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - }) - .toArray(URL[]::new); - - for (URL resourceUrl : resourceUrls) { - URLClassLoader classLoader = new URLClassLoader(new URL[] { resourceUrl }); - CombinedConfigSourceProvider configSourceProvider = new CombinedConfigSourceProvider(sourceUrls, ordinal, - fileExtensions); - configSourceProvider.getConfigSources(classLoader).forEach(configSourceConsumer); + for (var sourceDir : sourceDirectories) { + var sourceDirPath = sourceDir.toPath(); + var locations = new ArrayList(); + for (String file : fileExtensions) { + Path resolved = sourceDirPath.resolve(file); + if (Files.exists(resolved)) { + locations.add(resolved.toUri().toString()); + } + } + if (!locations.isEmpty()) { + URLClassLoader classLoader; + try { + classLoader = new URLClassLoader(new URL[] { sourceDir.toURI().toURL() }); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + CombinedConfigSourceProvider configSourceProvider = new CombinedConfigSourceProvider(sourceUrls, ordinal, + fileExtensions, locations); + configSourceProvider.getConfigSources(classLoader).forEach(configSourceConsumer); + } } } @@ -204,11 +211,13 @@ static final class CombinedConfigSourceProvider extends AbstractLocationConfigSo private final Consumer sourceUrls; private final int ordinal; private final String[] fileExtensions; + private final List locations; - CombinedConfigSourceProvider(Consumer sourceUrls, int ordinal, String[] fileExtensions) { + CombinedConfigSourceProvider(Consumer sourceUrls, int ordinal, String[] fileExtensions, List locations) { this.sourceUrls = sourceUrls; this.ordinal = ordinal; this.fileExtensions = fileExtensions; + this.locations = locations; } @Override @@ -225,8 +234,7 @@ protected ConfigSource loadConfigSource(final URL url, final int ordinal) throws @Override public List getConfigSources(final ClassLoader classLoader) { - // Note: - return loadConfigSources(getFileExtensions(), ordinal, classLoader); + return loadConfigSources(locations.toArray(new String[0]), ordinal, classLoader); } } }