Skip to content
Merged
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 @@ -25,6 +25,7 @@
import org.gradle.api.artifacts.ExternalModuleDependency;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.file.FileCollection;
import org.gradle.api.java.archives.Attributes;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.provider.Property;
Expand Down Expand Up @@ -212,14 +213,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));
QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES, quarkusExt));
// 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);
configureGenerateCodeTask(task, quarkusGenerateDevAppModelTask, QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES,
quarkusExt);
});
// quarkusGenerateCodeTests
TaskProvider<QuarkusGenerateCode> quarkusGenerateCodeTests = tasks.register(QUARKUS_GENERATE_CODE_TESTS_TASK_NAME,
Expand All @@ -228,7 +230,7 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
quarkusGenerateCodeTests.configure(task -> {
task.dependsOn("compileQuarkusTestGeneratedSourcesJava");
configureGenerateCodeTask(task, quarkusGenerateTestAppModelTask,
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES);
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES, quarkusExt);
});

TaskProvider<QuarkusApplicationModelTask> quarkusBuildAppModelTask = tasks.register("quarkusBuildAppModel",
Expand All @@ -240,14 +242,14 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
});
tasks.register(QUARKUS_SHOW_EFFECTIVE_CONFIG_TASK_NAME,
QuarkusShowEffectiveConfig.class, task -> {
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.setDescription("Show effective Quarkus build configuration.");
});

TaskProvider<QuarkusBuildDependencies> quarkusBuildDependencies = tasks.register(QUARKUS_BUILD_DEP_TASK_NAME,
QuarkusBuildDependencies.class,
task -> {
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.getOutputs().doNotCacheIf("Dependencies are never cached", t -> true);
});
project.afterEvaluate(evaluated -> addDependencyOnJandexIfConfigured(evaluated, quarkusBuildDependencies));
Expand All @@ -257,7 +259,7 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
TaskProvider<QuarkusBuildCacheableAppParts> quarkusBuildCacheableAppParts = tasks.register(
QUARKUS_BUILD_APP_PARTS_TASK_NAME,
QuarkusBuildCacheableAppParts.class, task -> {
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.dependsOn(quarkusGenerateCode);
task.getOutputs().doNotCacheIf(
"Not adding uber-jars, native binaries and mutable-jar package type to Gradle " +
Expand All @@ -273,7 +275,7 @@ public boolean isSatisfiedBy(Task t) {
});

TaskProvider<QuarkusBuild> quarkusBuild = tasks.register(QUARKUS_BUILD_TASK_NAME, QuarkusBuild.class, build -> {
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
build.dependsOn(quarkusBuildDependencies, quarkusBuildCacheableAppParts);
build.getOutputs().doNotCacheIf(
"Only collects and combines the outputs of " + QUARKUS_BUILD_APP_PARTS_TASK_NAME + " and "
Expand All @@ -297,28 +299,28 @@ public boolean isSatisfiedBy(Task t) {

tasks.register(IMAGE_BUILD_TASK_NAME, ImageBuild.class, task -> {
task.dependsOn(quarkusRequiredExtension);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.getBuilderName().set(quarkusRequiredExtension.flatMap(ImageCheckRequirementsTask::getOutputFile));
task.finalizedBy(quarkusBuild);
});

tasks.register(IMAGE_PUSH_TASK_NAME, ImagePush.class, task -> {
task.dependsOn(quarkusRequiredExtension);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.getBuilderName().set(quarkusRequiredExtension.flatMap(ImageCheckRequirementsTask::getOutputFile));
task.finalizedBy(quarkusBuild);
});

tasks.register(DEPLOY_TASK_NAME, Deploy.class, task -> {
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
task.finalizedBy(quarkusBuild);
});

TaskProvider<QuarkusDev> quarkusDev = tasks.register(QUARKUS_DEV_TASK_NAME, QuarkusDev.class, devRuntimeDependencies,
quarkusExt);
TaskProvider<QuarkusRun> quarkusRun = tasks.register(QUARKUS_RUN_TASK_NAME, QuarkusRun.class,
build -> {
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider);
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
build.dependsOn(quarkusBuild);

});
Expand Down Expand Up @@ -471,7 +473,11 @@ public boolean isSatisfiedBy(Task t) {
quarkusGenerateTestAppModelTask.flatMap(QuarkusApplicationModelTask::getApplicationModel),
quarkusBuild.map(QuarkusBuild::getNativeRunner),
mainSourceSet.getOutput().getClassesDirs(),
project.getObjects().newInstance(QuarkusPluginExtensionView.class, quarkusExt)));
project.getObjects().newInstance(QuarkusPluginExtensionView.class, quarkusExt),
project.getObjects().mapProperty(String.class, Object.class)
.convention(quarkusExt.manifest().getAttributes()),
project.getObjects().mapProperty(String.class, Attributes.class)
.convention(quarkusExt.getAttributes())));

// also make each task use the JUnit platform since it's the only supported test environment
t.useJUnitPlatform();
Expand Down Expand Up @@ -523,18 +529,35 @@ private static void configureApplicationModelTask(Project project, QuarkusApplic

private static void configureQuarkusBuildTask(Project project, QuarkusBuildTask task,
TaskProvider<QuarkusApplicationModelTask> quarkusGenerateAppModelTask,
Provider<ForcedPropertieBuildService> serviceProvider) {
Provider<ForcedPropertieBuildService> serviceProvider,
QuarkusPluginExtension quarkusExt) {
task.getApplicationModel().set(quarkusGenerateAppModelTask.flatMap(QuarkusApplicationModelTask::getApplicationModel));
SourceSet mainSourceSet = getSourceSet(project, SourceSet.MAIN_SOURCE_SET_NAME);
task.getAdditionalForcedProperties().set(serviceProvider);
task.usesService(serviceProvider);
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());

}

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

private void createSourceSets(Project project) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@
import org.gradle.api.Task;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.RegularFile;
import org.gradle.api.java.archives.Attributes;
import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.testing.Test;

import io.quarkus.bootstrap.BootstrapConstants;
import io.quarkus.bootstrap.model.ApplicationModel;
import io.quarkus.gradle.tasks.EffectiveConfigProvider;
import io.quarkus.gradle.tasks.QuarkusPluginExtensionView;
import io.quarkus.gradle.tooling.ToolingUtils;
import io.smallrye.config.SmallRyeConfig;
Expand All @@ -31,17 +34,23 @@ public class BeforeTestAction implements Action<Task> {
private final Provider<File> nativeRunnerPath;
private final FileCollection mainSourceSetClassesDir;
private final QuarkusPluginExtensionView extensionView;
private final MapProperty<String, Object> manifestAttributes;
private final MapProperty<String, Attributes> manifestSections;

public BeforeTestAction(File projectDir, FileCollection combinedOutputSourceDirs,
Provider<RegularFile> applicationModelPath, Provider<File> nativeRunnerPath,
FileCollection mainSourceSetClassesDir,
QuarkusPluginExtensionView extensionView) {
QuarkusPluginExtensionView extensionView,
MapProperty<String, Object> manifestAttributes,
MapProperty<String, Attributes> manifestSections) {
this.projectDir = projectDir;
this.combinedOutputSourceDirs = combinedOutputSourceDirs;
this.applicationModelPath = applicationModelPath;
this.nativeRunnerPath = nativeRunnerPath;
this.mainSourceSetClassesDir = mainSourceSetClassesDir;
this.extensionView = extensionView;
this.manifestAttributes = manifestAttributes;
this.manifestSections = manifestSections;

}

Expand All @@ -54,7 +63,8 @@ public void execute(Task t) {
ApplicationModel applicationModel = ToolingUtils
.deserializeAppModel(applicationModelPath.get().getAsFile().toPath());

SmallRyeConfig config = extensionView.buildEffectiveConfiguration(applicationModel, new HashMap<>()).getConfig();
SmallRyeConfig config = effectiveProvider().buildEffectiveConfiguration(applicationModel, new HashMap<>())
.getConfig();
config.getOptionalValue(TEST.getProfileKey(), String.class)
.ifPresent(value -> props.put(TEST.getProfileKey(), value));

Expand Down Expand Up @@ -88,4 +98,19 @@ public void execute(Task t) {
throw new IllegalStateException("Failed to resolve deployment classpath", e);
}
}

private EffectiveConfigProvider effectiveProvider() {
return new EffectiveConfigProvider(
extensionView.getIgnoredEntries(),
extensionView.getMainResources(),
extensionView.getForcedProperties(),
extensionView.getProjectProperties(),
extensionView.getQuarkusBuildProperties(),
extensionView.getQuarkusRelevantProjectProperties(),
manifestAttributes,
manifestSections,
extensionView.getNativeBuild(),
extensionView.getQuarkusProfileSystemVariable(),
extensionView.getQuarkusProfileEnvVariable());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import org.gradle.process.JavaForkOptions;

import io.quarkus.bootstrap.model.ApplicationModel;
import io.quarkus.deployment.pkg.NativeConfig;
import io.quarkus.deployment.pkg.PackageConfig;
import io.quarkus.gradle.dsl.Manifest;
import io.quarkus.maven.dependency.ResolvedDependency;
import io.smallrye.common.expression.Expression;
Expand Down Expand Up @@ -97,7 +99,7 @@ private BaseConfig buildBaseConfig() {
return new BaseConfig(effectiveConfig);
}

protected BaseConfig baseConfig() {
public BaseConfig baseConfig() {
this.baseConfig.finalizeValue();
return this.baseConfig.get();
}
Expand All @@ -114,10 +116,26 @@ protected FileCollection classpath() {
return classpath;
}

protected Manifest manifest() {
public Manifest manifest() {
return baseConfig().manifest();
}

public Map<String, Attributes> getAttributes() {
return manifest().getSections();
}

public PackageConfig packageConfig() {
return baseConfig().packageConfig();
}

public Map<String, String> cachingRelevantProperties(List<String> propertyPatterns) {
return baseConfig().cachingRelevantProperties(propertyPatterns);
}

public NativeConfig nativeConfig() {
return baseConfig().nativeConfig();
}

protected EffectiveConfig buildEffectiveConfiguration(ApplicationModel appModel) {
ResolvedDependency appArtifact = appModel.getAppArtifact();

Expand Down
Loading
Loading