diff --git a/core/deployment/src/main/java/io/quarkus/deployment/builditem/BuildTimeConfigurationSourceBuildItem.java b/core/deployment/src/main/java/io/quarkus/deployment/builditem/BuildTimeConfigurationSourceBuildItem.java new file mode 100644 index 0000000000000..a6a9d26234868 --- /dev/null +++ b/core/deployment/src/main/java/io/quarkus/deployment/builditem/BuildTimeConfigurationSourceBuildItem.java @@ -0,0 +1,43 @@ +package io.quarkus.deployment.builditem; + +import java.util.function.Supplier; + +import org.eclipse.microprofile.config.spi.ConfigSource; +import org.wildfly.common.Assert; + +import io.quarkus.builder.item.MultiBuildItem; + +/** + * Define an additional configuration source which is used at build time. + */ +public final class BuildTimeConfigurationSourceBuildItem extends MultiBuildItem { + private final Supplier configSourceSupplier; + + /** + * Construct a new instance. + * + * @param configSourceSupplier the config source supplier (must not be {@code null}) + */ + public BuildTimeConfigurationSourceBuildItem(final Supplier configSourceSupplier) { + Assert.checkNotNullParam("configSourceSupplier", configSourceSupplier); + this.configSourceSupplier = configSourceSupplier; + } + + /** + * Construct a new instance. + * + * @param configSource the config source (must not be {@code null}) + */ + public BuildTimeConfigurationSourceBuildItem(final ConfigSource configSource) { + this(() -> Assert.checkNotNullParam("configSource", configSource)); + } + + /** + * Get the config source supplier. + * + * @return the config source supplier + */ + public Supplier getConfigSourceSupplier() { + return configSourceSupplier; + } +} diff --git a/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigurationSetup.java b/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigurationSetup.java index a5d8a9f353ad1..c9b9c8e4f822c 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigurationSetup.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigurationSetup.java @@ -20,6 +20,7 @@ import java.util.function.Consumer; import java.util.function.UnaryOperator; +import io.quarkus.deployment.builditem.BuildTimeConfigurationSourceBuildItem; import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.spi.ConfigBuilder; import org.eclipse.microprofile.config.spi.ConfigProviderResolver; @@ -170,6 +171,7 @@ public ConfigurationSetup() { * @param resourceConsumer * @param niResourceConsumer * @param runTimeDefaultConsumer + * @param configSourceItems the build-time config source build items * @param extensionClassLoaderBuildItem the extension class loader build item * @param archiveRootBuildItem the application archive root * @throws IOException @@ -183,6 +185,7 @@ public void initializeConfiguration( Consumer resourceConsumer, Consumer niResourceConsumer, Consumer runTimeDefaultConsumer, + List configSourceItems, ExtensionClassLoaderBuildItem extensionClassLoaderBuildItem, ArchiveRootBuildItem archiveRootBuildItem) throws IOException, ClassNotFoundException { @@ -223,6 +226,13 @@ public void initializeConfiguration( final DefaultValuesConfigurationSource defaultSource = new DefaultValuesConfigurationSource( buildTimeConfig.getLeafPatterns()); builder.withSources(inJar, defaultSource); + final int cnt = configSourceItems.size(); + final ConfigSource[] configSources = new ConfigSource[cnt]; + int i = 0; + for (BuildTimeConfigurationSourceBuildItem item : configSourceItems) { + configSources[i++] = item.getConfigSourceSupplier().get(); + } + builder.withSources(configSources); // populate builder with all converters loaded from ServiceLoader ConverterSupport.populateConverters(builder);