added toolchain support to NativeImageconfigurationTask
All checks were successful
CI / build (push) Successful in 1m32s

This commit is contained in:
2025-03-08 14:36:47 +08:00
parent 97df729677
commit 8d9861ae75
3 changed files with 24 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
package net.woggioni.gradle.graalvm; package net.woggioni.gradle.graalvm;
import org.gradle.api.Action;
import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.DirectoryProperty;
@@ -17,6 +18,8 @@ import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.bundling.Jar; import org.gradle.api.tasks.bundling.Jar;
import org.gradle.jvm.toolchain.JavaLauncher; import org.gradle.jvm.toolchain.JavaLauncher;
import org.gradle.jvm.toolchain.JavaToolchainService; import org.gradle.jvm.toolchain.JavaToolchainService;
import org.gradle.jvm.toolchain.JavaToolchainSpec;
import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec;
import org.gradle.process.CommandLineArgumentProvider; import org.gradle.process.CommandLineArgumentProvider;
import java.util.ArrayList; import java.util.ArrayList;
@@ -35,10 +38,18 @@ public abstract class NativeImageConfigurationTask extends JavaExec {
@OutputDirectory @OutputDirectory
public abstract DirectoryProperty getConfigurationDir(); public abstract DirectoryProperty getConfigurationDir();
private final JavaToolchainSpec toolchain;
public JavaToolchainSpec toolchain(Action<? super JavaToolchainSpec> action) {
action.execute(toolchain);
return toolchain;
}
public NativeImageConfigurationTask() { public NativeImageConfigurationTask() {
setGroup(GRAALVM_TASK_GROUP); setGroup(GRAALVM_TASK_GROUP);
setDescription("Run the application with the native-image-agent " + setDescription("Run the application with the native-image-agent " +
"to create a configuration for native image creation"); "to create a configuration for native image creation");
toolchain = getProject().getObjects().newInstance(DefaultToolchainSpec.class);
ProjectLayout layout = getProject().getLayout(); ProjectLayout layout = getProject().getLayout();
TaskContainer taskContainer = getProject().getTasks(); TaskContainer taskContainer = getProject().getTasks();
JavaApplication javaApplication = getProject().getExtensions().findByType(JavaApplication.class); JavaApplication javaApplication = getProject().getExtensions().findByType(JavaApplication.class);
@@ -46,8 +57,8 @@ public abstract class NativeImageConfigurationTask extends JavaExec {
ExtensionContainer ext = getProject().getExtensions(); ExtensionContainer ext = getProject().getExtensions();
Property<JavaLauncher> javaLauncherProperty = getJavaLauncher(); Property<JavaLauncher> javaLauncherProperty = getJavaLauncher();
Optional.ofNullable(ext.findByType(JavaToolchainService.class)) Optional.ofNullable(ext.findByType(JavaToolchainService.class))
.flatMap(ts -> Optional.ofNullable(javaExtension.getToolchain()).map(ts::launcherFor)) .flatMap(ts -> Optional.of(toolchain).map(ts::launcherFor))
.ifPresent(javaLauncherProperty::set); .ifPresent(javaLauncherProperty::convention);
if(!Objects.isNull(javaApplication)) { if(!Objects.isNull(javaApplication)) {
getMainClass().convention(javaApplication.getMainClass()); getMainClass().convention(javaApplication.getMainClass());
getMainModule().convention(javaApplication.getMainModule()); getMainModule().convention(javaApplication.getMainModule());

View File

@@ -74,8 +74,16 @@ public class NativeImagePlugin implements Plugin<Project> {
configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)); configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME));
nativeImageExtension.getClasspath().convention(classpath); nativeImageExtension.getClasspath().convention(classpath);
Provider<NativeImageConfigurationTask> nativeImageConfigurationTaskProvider = Provider<NativeImageConfigurationTask> nativeImageConfigurationTaskProvider = tasks.register(
tasks.register(CONFIGURE_NATIVE_IMAGE_TASK_NAME, NativeImageConfigurationTask.class); CONFIGURE_NATIVE_IMAGE_TASK_NAME,
NativeImageConfigurationTask.class,
nativeImageConfigurationTask -> {
nativeImageConfigurationTask.toolchain(jts -> {
jts.getImplementation().convention(nativeImageExtension.getToolchain().getImplementation());
jts.getVendor().convention(nativeImageExtension.getToolchain().getVendor());
jts.getLanguageVersion().convention(nativeImageExtension.getToolchain().getLanguageVersion());
});
});
Provider<NativeImageTask> nativeImageTaskProvider = tasks.register(NATIVE_IMAGE_TASK_NAME, NativeImageTask.class, nativeImageTask -> { Provider<NativeImageTask> nativeImageTaskProvider = tasks.register(NATIVE_IMAGE_TASK_NAME, NativeImageTask.class, nativeImageTask -> {
nativeImageTask.getClasspath().set(nativeImageExtension.getClasspath()); nativeImageTask.getClasspath().set(nativeImageExtension.getClasspath());

View File

@@ -1,5 +1,5 @@
lys.catalog.version=2025.02.05 lys.catalog.version=2025.02.05
version.myGradlePlugins=2025.03.03 version.myGradlePlugins=2025.03.08
version.gradle=8.12 version.gradle=8.12
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven