Skip to content

Commit 00a8cc3

Browse files
committed
Fix resource inference not working on custom binaries
Before this commit, resource inference was only wired for the main and test binaries. Now each custom binary will have a proper native inference task associated with it. This bug was discovered during the Micronaut AOT work, where resources were missing from the optimized AOT binary.
1 parent b0150ea commit 00a8cc3

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

docs/src/docs/asciidoc/index.adoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ If you are interested in contributing, please refer to our https://github.com/gr
1515
[[changelog]]
1616
== Changelog
1717

18+
=== Release 0.9.9
19+
20+
==== Gradle plugin
21+
22+
* Fixed resource inference not working on custom binaries
23+
1824
=== Release 0.9.8
1925

2026
==== Gradle plugin

native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,13 @@
7878
import org.gradle.api.plugins.ApplicationPlugin;
7979
import org.gradle.api.plugins.JavaApplication;
8080
import org.gradle.api.plugins.JavaPlugin;
81+
import org.gradle.api.plugins.JavaPluginConvention;
8182
import org.gradle.api.provider.ListProperty;
8283
import org.gradle.api.provider.Property;
8384
import org.gradle.api.provider.Provider;
8485
import org.gradle.api.tasks.JavaExec;
8586
import org.gradle.api.tasks.SourceSet;
87+
import org.gradle.api.tasks.SourceSetContainer;
8688
import org.gradle.api.tasks.TaskContainer;
8789
import org.gradle.api.tasks.TaskProvider;
8890
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
@@ -191,7 +193,8 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
191193

192194
// Register Native Image tasks
193195
TaskContainer tasks = project.getTasks();
194-
configureAutomaticTaskCreation(project, graalExtension, agents, tasks);
196+
JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
197+
configureAutomaticTaskCreation(project, graalExtension, agents, tasks, javaConvention.getSourceSets());
195198

196199
TaskProvider<BuildNativeImageTask> imageBuilder = tasks.named(NATIVE_COMPILE_TASK_NAME, BuildNativeImageTask.class);
197200
TaskProvider<Task> deprecatedTask = tasks.register(DEPRECATED_NATIVE_BUILD_TASK, t -> {
@@ -206,16 +209,6 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
206209
mainOptions.getAgent().getInstrumentedTask().convention(runTask);
207210
});
208211

209-
TaskProvider<GenerateResourcesConfigFile> generateResourcesConfig = registerResourcesConfigTask(
210-
graalExtension.getGeneratedResourcesDirectory(),
211-
mainOptions,
212-
tasks,
213-
transitiveProjectArtifacts(project, JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME),
214-
GENERATE_RESOURCES_CONFIG_FILE_TASK_NAME);
215-
mainOptions.getConfigurationFileDirectories().from(generateResourcesConfig.map(t ->
216-
t.getOutputFile().map(f -> f.getAsFile().getParentFile())
217-
));
218-
219212
graalExtension.registerTestBinary("test", config -> {
220213
config.forTestTask(tasks.named("test", Test.class));
221214
config.usingSourceSet(GradleUtils.findSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME));
@@ -225,7 +218,8 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
225218
private void configureAutomaticTaskCreation(Project project,
226219
GraalVMExtension graalExtension,
227220
Map<String, Provider<Boolean>> agents,
228-
TaskContainer tasks) {
221+
TaskContainer tasks,
222+
SourceSetContainer sourceSets) {
229223
graalExtension.getBinaries().configureEach(options -> {
230224
String binaryName = options.getName();
231225
String compileTaskName = deriveTaskName(binaryName, "native", "Compile");
@@ -254,6 +248,16 @@ private void configureAutomaticTaskCreation(Project project,
254248
task.getRuntimeArgs().convention(options.getRuntimeArgs());
255249
});
256250
configureClasspathJarFor(tasks, options, imageBuilder);
251+
SourceSet sourceSet = "test".equals(binaryName) ? sourceSets.getByName(SourceSet.TEST_SOURCE_SET_NAME) : sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
252+
TaskProvider<GenerateResourcesConfigFile> generateResourcesConfig = registerResourcesConfigTask(
253+
graalExtension.getGeneratedResourcesDirectory(),
254+
options,
255+
tasks,
256+
transitiveProjectArtifacts(project, sourceSet.getRuntimeClasspathConfigurationName()),
257+
deriveTaskName(binaryName, "generate", "ResourcesConfigFile"));
258+
options.getConfigurationFileDirectories().from(generateResourcesConfig.map(t ->
259+
t.getOutputFile().map(f -> f.getAsFile().getParentFile())
260+
));
257261
});
258262
}
259263

@@ -352,16 +356,6 @@ public void registerTestBinary(Project project,
352356
deprecateExtension(project, testOptions, DEPRECATED_NATIVE_TEST_EXTENSION, "test");
353357
}
354358

355-
TaskProvider<GenerateResourcesConfigFile> generateTestResourcesConfig = registerResourcesConfigTask(
356-
graalExtension.getGeneratedResourcesDirectory(),
357-
testOptions,
358-
tasks,
359-
transitiveProjectArtifacts(project, config.getSourceSet().getRuntimeClasspathConfigurationName()),
360-
deriveTaskName(name, "generate", "ResourcesConfigFile"));
361-
testOptions.getConfigurationFileDirectories().from(generateTestResourcesConfig.map(t ->
362-
t.getOutputFile().map(f -> f.getAsFile().getParentFile())
363-
));
364-
365359
TaskProvider<Test> testTask = config.validate().getTestTask();
366360
testOptions.getAgent().getInstrumentedTask().set(testTask);
367361
testTask.configure(test -> {

0 commit comments

Comments
 (0)