Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import io.quarkus.gradle.dependency.ApplicationDeploymentClasspathBuilder;
import io.quarkus.gradle.extension.QuarkusPluginExtension;
import io.quarkus.gradle.extension.SourceSetExtension;
import io.quarkus.gradle.tasks.BaseConfigProvider;
import io.quarkus.gradle.tasks.BuildAotEnhancedImage;
import io.quarkus.gradle.tasks.Deploy;
import io.quarkus.gradle.tasks.ImageBuild;
Expand Down Expand Up @@ -224,15 +225,15 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
QuarkusGenerateCode.class, LaunchMode.NORMAL, SourceSet.MAIN_SOURCE_SET_NAME,
quarkusExt.getCodeGenerationInputs().get());
quarkusGenerateCode.configure(task -> configureGenerateCodeTask(task, quarkusGenerateAppModelTask,
QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES, quarkusExt));
QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES, quarkusExt, project));
// quarkusGenerateCodeDev
TaskProvider<QuarkusGenerateCode> quarkusGenerateCodeDev = tasks.register(QUARKUS_GENERATE_CODE_DEV_TASK_NAME,
QuarkusGenerateCode.class, LaunchMode.DEVELOPMENT, SourceSet.MAIN_SOURCE_SET_NAME,
quarkusExt.getCodeGenerationInputs().get());
quarkusGenerateCodeDev.configure(task -> {
task.dependsOn(quarkusGenerateCode);
configureGenerateCodeTask(task, quarkusGenerateDevAppModelTask, QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES,
quarkusExt);
quarkusExt, project);
});
// quarkusGenerateCodeTests
TaskProvider<QuarkusGenerateCode> quarkusGenerateCodeTests = tasks.register(QUARKUS_GENERATE_CODE_TESTS_TASK_NAME,
Expand All @@ -241,7 +242,7 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
quarkusGenerateCodeTests.configure(task -> {
task.dependsOn("compileQuarkusTestGeneratedSourcesJava");
configureGenerateCodeTask(task, quarkusGenerateTestAppModelTask,
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES, quarkusExt);
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES, quarkusExt, project);
});

TaskProvider<QuarkusApplicationModelTask> quarkusBuildAppModelTask = tasks.register("quarkusBuildAppModel",
Expand Down Expand Up @@ -469,6 +470,10 @@ public boolean isSatisfiedBy(Task t) {
t.getInputs().files(quarkusGenerateTestAppModelTask);
// Register matching compose files from project root as inputs
t.getInputs().files(composeDevFiles(project));
BaseConfigProvider values = new BaseConfigProvider(
quarkusExt.getDisableCreatingBuildConfigDuringConfiguration().get(),
project, quarkusExt);

// Quarkus test configuration action which should be executed before any Quarkus test
t.doFirst(new BeforeTestAction(
project.getProjectDir(),
Expand All @@ -478,9 +483,11 @@ public boolean isSatisfiedBy(Task t) {
mainSourceSet.getOutput().getClassesDirs(),
project.getObjects().newInstance(QuarkusPluginExtensionView.class, quarkusExt),
project.getObjects().mapProperty(String.class, Object.class)
.convention(quarkusExt.manifest().getAttributes()),
.convention(values.getManifestAttributes()),
project.getObjects().mapProperty(String.class, Attributes.class)
.convention(quarkusExt.getAttributes())));
.convention(values.getManifestSections()),
project.getObjects().listProperty(String.class)
.convention(values.getIgnoredEntries())));

// also make each task use the JUnit platform since it's the only supported test environment
t.useJUnitPlatform();
Expand Down Expand Up @@ -607,26 +614,27 @@ private static void configureQuarkusBuildTask(Project project, QuarkusBuildTask
task.setCompileClasspath(mainSourceSet.getCompileClasspath().plus(mainSourceSet.getRuntimeClasspath())
.plus(mainSourceSet.getAnnotationProcessorPath())
.plus(mainSourceSet.getResources()));
task.getCachingRelevantInput().set(quarkusExt
.cachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
task.getJarEnabled().set(quarkusExt.packageConfig().jar().enabled());
task.getNativeEnabled().set(quarkusExt.nativeConfig().enabled());
task.getNativeSourcesOnly().set(quarkusExt.nativeConfig().sourcesOnly());
task.getRunnerSuffix().set(quarkusExt.packageConfig().computedRunnerSuffix());
task.getRunnerName().set(
quarkusExt.packageConfig().outputName().orElseGet(quarkusExt::finalName));
task.getOutputDirectory()
.set(Path.of(quarkusExt.packageConfig().outputDirectory().map(Path::toString)
.orElse(QuarkusPlugin.DEFAULT_OUTPUT_DIRECTORY)));
task.getJarType().set(quarkusExt.packageConfig().jar().type());
task.getManifestAttributes().set(quarkusExt.manifest().getAttributes());
task.getManifestSections().set(quarkusExt.manifest().getSections());
BaseConfigProvider values = new BaseConfigProvider(quarkusExt.getDisableCreatingBuildConfigDuringConfiguration().get(),
project, quarkusExt);
task.getCachingRelevantInput()
.set(values.getCachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
task.getJarEnabled().set(values.getJarEnabled());
task.getNativeEnabled().set(values.getNativeEnabled());
task.getNativeSourcesOnly().set(values.getNativeSourcesOnly());
task.getRunnerSuffix().set(values.getRunnerSuffix());
task.getRunnerName().set(values.getOutputName());
task.getOutputDirectory().set(values.getOutputDirectory());
task.getJarType().set(values.getJarType());
task.getManifestAttributes().set(values.getManifestAttributes());
task.getManifestSections().set(values.getManifestSections());
task.getIgnoredListEntries().set(values.getIgnoredEntries());

}

private static void configureGenerateCodeTask(QuarkusGenerateCode task,
TaskProvider<QuarkusApplicationModelTask> applicationModelTaskTaskProvider, String generateSourcesDir,
QuarkusPluginExtension quarkusExt) {
QuarkusPluginExtension quarkusExt,
Project project) {
SourceSet generatedSources = getSourceSet(task.getProject(), generateSourcesDir);
Set<File> sourceSetOutput = generatedSources.getOutput().filter(f -> f.getName().equals(generateSourcesDir)).getFiles();
if (sourceSetOutput.isEmpty()) {
Expand All @@ -636,10 +644,13 @@ private static void configureGenerateCodeTask(QuarkusGenerateCode task,
task.getApplicationModel()
.set(applicationModelTaskTaskProvider.flatMap(QuarkusApplicationModelTask::getApplicationModel));
task.getGeneratedOutputDirectory().set(generatedSources.getJava().getClassesDirectory());
BaseConfigProvider values = new BaseConfigProvider(quarkusExt.getDisableCreatingBuildConfigDuringConfiguration().get(),
project, quarkusExt);
task.getCachingRelevantInput()
.set(quarkusExt.cachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
task.getManifestAttributes().set(quarkusExt.manifest().getAttributes());
task.getManifestSections().set(quarkusExt.manifest().getSections());
.set(values.getCachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
task.getManifestAttributes().set(values.getManifestAttributes());
task.getManifestSections().set(values.getManifestSections());
task.getIgnoredListEntries().set(values.getIgnoredEntries());
}

private void createSourceSets(Project project) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.RegularFile;
import org.gradle.api.java.archives.Attributes;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.testing.Test;
Expand All @@ -37,12 +38,15 @@ public class BeforeTestAction implements Action<Task> {
private final MapProperty<String, Object> manifestAttributes;
private final MapProperty<String, Attributes> manifestSections;

private final ListProperty<String> ignoredEntries;

public BeforeTestAction(File projectDir, FileCollection combinedOutputSourceDirs,
Provider<RegularFile> applicationModelPath, Provider<File> nativeRunnerPath,
FileCollection mainSourceSetClassesDir,
QuarkusPluginExtensionView extensionView,
MapProperty<String, Object> manifestAttributes,
MapProperty<String, Attributes> manifestSections) {
MapProperty<String, Attributes> manifestSections,
ListProperty<String> ignoredEntries) {
this.projectDir = projectDir;
this.combinedOutputSourceDirs = combinedOutputSourceDirs;
this.applicationModelPath = applicationModelPath;
Expand All @@ -51,6 +55,7 @@ public BeforeTestAction(File projectDir, FileCollection combinedOutputSourceDirs
this.extensionView = extensionView;
this.manifestAttributes = manifestAttributes;
this.manifestSections = manifestSections;
this.ignoredEntries = ignoredEntries;

}

Expand Down Expand Up @@ -100,7 +105,7 @@ public void execute(Task t) {

private EffectiveConfigProvider effectiveProvider() {
return new EffectiveConfigProvider(
extensionView.getIgnoredEntries(),
ignoredEntries,
extensionView.getMainResources(),
extensionView.getForcedProperties(),
extensionView.getProjectProperties(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public abstract class QuarkusPluginExtension extends AbstractQuarkusExtension {
private final ListProperty<String> codeGenerationProviders;
private final ListProperty<String> codeGenerationInputs;

private final Property<Boolean> disableCreatingBuildConfigDuringConfiguration;

public QuarkusPluginExtension(Project project) {
super(project);

Expand All @@ -59,6 +61,7 @@ public QuarkusPluginExtension(Project project) {
.convention(List.of(CODE_GENERATION_INPUT));

this.sourceSetExtension = new SourceSetExtension();
this.disableCreatingBuildConfigDuringConfiguration = project.getObjects().property(Boolean.class).convention(false);
}

public Manifest getManifest() {
Expand Down Expand Up @@ -265,4 +268,12 @@ public void set(String name, Provider<String> value) {
private String addQuarkusBuildPropertyPrefix(String name) {
return String.format("quarkus.%s", name);
}

public void setDisableCreatingBuildConfigDuringConfiguration(Boolean disableCreatingBuildConfigDuringConfiguration) {
this.disableCreatingBuildConfigDuringConfiguration.set(disableCreatingBuildConfigDuringConfiguration);
}

public Property<Boolean> getDisableCreatingBuildConfigDuringConfiguration() {
return disableCreatingBuildConfigDuringConfiguration;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
package io.quarkus.gradle.tasks;

import static io.quarkus.gradle.tasks.QuarkusPropertiesResolver.*;

import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.gradle.api.Project;
import org.gradle.api.java.archives.Attributes;

import io.quarkus.deployment.pkg.PackageConfig;
import io.quarkus.gradle.QuarkusPlugin;
import io.quarkus.gradle.extension.QuarkusPluginExtension;

/**
* BaseConfigProvider is used to provide configuration values to the tasks during the configuration phase.
* By default it provides the BaseConfig values from the plugin extension, but when
* {@link io.quarkus.gradle.extension.QuarkusPluginExtension#getDisableCreatingBuildConfigDuringConfiguration()}
* is enabled, it resolves the properties from system properties and the
* {@code application.properties} file in the resources directory.
*/
public class BaseConfigProvider {

private final Boolean disableCreatingBuildConfigDuringConfiguration;
private final QuarkusPluginExtension extension;

private final Map<String, String> properties;

private final Project project;

public BaseConfigProvider(Boolean disableCreatingBuildConfigDuringConfiguration,
Project project,
QuarkusPluginExtension extension) {
this.disableCreatingBuildConfigDuringConfiguration = disableCreatingBuildConfigDuringConfiguration;
this.extension = extension;
if (disableCreatingBuildConfigDuringConfiguration) {
properties = QuarkusPropertiesResolver.resolve(project, extension);
} else {
properties = Map.of();
}
this.project = project;
}

public Boolean getJarEnabled() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Boolean.parseBoolean(properties.get(KEY_JAR_ENABLED));
} else {
return extension.packageConfig().jar().enabled();
}
}

public Boolean getNativeEnabled() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Boolean.parseBoolean(properties.get(KEY_NATIVE_ENABLED));
} else {
return extension.nativeConfig().enabled();
}
}

public Path getOutputDirectory() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Path.of(properties.get(KEY_OUTPUT_DIRECTORY));
} else {
return Path.of(extension.packageConfig().outputDirectory().map(Path::toString)
.orElse(QuarkusPlugin.DEFAULT_OUTPUT_DIRECTORY));
}
}

public String getOutputName() {
if (disableCreatingBuildConfigDuringConfiguration) {
return properties.get(KEY_OUTPUT_NAME);
} else {
return extension.packageConfig().outputName().orElseGet(extension::finalName);
}
}

public Boolean getNativeSourcesOnly() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Boolean.parseBoolean(properties.get(KEY_NATIVE_SOURCES_ONLY));
} else {
return extension.nativeConfig().sourcesOnly();
}
}

public PackageConfig.JarConfig.JarType getJarType() {
if (disableCreatingBuildConfigDuringConfiguration) {
return PackageConfig.JarConfig.JarType.fromString(properties.get(KEY_JAR_TYPE));
} else {
return extension.packageConfig().jar().type();
}
}

public String getRunnerSuffix() {
if (disableCreatingBuildConfigDuringConfiguration) {
if (Boolean.parseBoolean(properties.get(KEY_ADD_RUNNER_SUFFIX))) {
return properties.get(KEY_RUNNER_SUFFIX);
} else {
return "";
}
} else {
return extension.packageConfig().computedRunnerSuffix();
}
}

public Map<String, String> getCachingRelevantProperties(List<String> cachingRelevantProperties) {
if (disableCreatingBuildConfigDuringConfiguration) {
return cachingRelevantProperties.stream()
.filter(s -> !s.matches("quarkus\\..*") && !s.matches("platform\\.quarkus\\..*"))
.map(s -> Map.entry(s, project.getProviders().environmentVariable(s)))
.filter(e -> e.getValue().isPresent())
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().get()));

} else {
return extension.cachingRelevantProperties(extension.getCachingRelevantProperties().get());
}

}

public Map<String, Object> getManifestAttributes() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Map.of();
} else {
return extension.manifest().getAttributes();
}
}

public Map<String, Attributes> getManifestSections() {
if (disableCreatingBuildConfigDuringConfiguration) {
return Map.of();
} else {
return extension.manifest().getSections();
}
}

public List<String> getIgnoredEntries() {
if (disableCreatingBuildConfigDuringConfiguration) {
String userIgnoredEntries = properties.get(KEY_IGNORED_ENTRIES);
if (userIgnoredEntries != null && !userIgnoredEntries.isEmpty()) {
return List.of(userIgnoredEntries.split(","));
} else {
return List.of();
}
} else {
return extension.ignoredEntriesProperty().get();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ Builder withProfile(String profile) {
* @param sourceDirectories a Set of source directories specified by the Gradle build.
* @return a {@link ClassLoader} with the source paths
*/
private static ClassLoader toUrlClassloader(Set<File> sourceDirectories) {
public static ClassLoader toUrlClassloader(Set<File> sourceDirectories) {
List<URL> urls = new ArrayList<>();
for (File sourceDirectory : sourceDirectories) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

import org.gradle.api.Action;
import org.gradle.api.GradleException;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.Internal;
Expand Down Expand Up @@ -53,15 +52,10 @@ public QuarkusBuild nativeArgs(Action<Map<String, ?>> action) {
return this;
}

@Internal
public ListProperty<String> getIgnoredEntries() {
return extension().ignoredEntriesProperty();
}

@Option(description = "When using the uber-jar option, this option can be used to "
+ "specify one or more entries that should be excluded from the final jar", option = "ignored-entry")
public void setIgnoredEntries(List<String> ignoredEntries) {
getIgnoredEntries().addAll(ignoredEntries);
getIgnoredListEntries().addAll(ignoredEntries);
}

@Internal
Expand Down
Loading
Loading