diff --git a/src/functionalTest/java/org/mikeneck/graalvm/Case175WithoutMainClass.java b/src/functionalTest/java/org/mikeneck/graalvm/Case175WithoutMainClass.java new file mode 100644 index 0000000..f47d4cc --- /dev/null +++ b/src/functionalTest/java/org/mikeneck/graalvm/Case175WithoutMainClass.java @@ -0,0 +1,26 @@ +package org.mikeneck.graalvm; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; +import org.gradle.testkit.runner.TaskOutcome; +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +/** + * @see GitHub + * Issue + */ +class Case175WithoutMainClass { + + @Test + @ExtendWith(TestProjectSetup.class) + @TestProject(value = "case-175-without-mainclass") + void run(@NotNull Gradlew gradlew, @NotNull FunctionalTestContext context) { + BuildResult result = gradlew.invoke("nativeImage", "--info"); + assertThat(result.tasks(TaskOutcome.SUCCESS).stream().map(BuildTask::getPath)) + .contains(":nativeImage"); + } +} diff --git a/src/functionalTest/resources/case-175-without-mainclass/build-gradle-kts.txt b/src/functionalTest/resources/case-175-without-mainclass/build-gradle-kts.txt new file mode 100644 index 0000000..a4ef447 --- /dev/null +++ b/src/functionalTest/resources/case-175-without-mainclass/build-gradle-kts.txt @@ -0,0 +1,26 @@ +plugins { + `java` + id("org.mikeneck.graalvm-native-image") +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("org.slf4j:slf4j-simple:1.7.28") +} + +nativeImage { + graalVmHome = System.getenv("JAVA_HOME") + buildType { build -> + build.executable(main = "com.example.App") + } + executableName = "test-app" + arguments("--no-fallback") +} + +generateNativeImageConfig { + enabled = true + byRunningApplicationWithoutArguments() +} diff --git a/src/functionalTest/resources/case-175-without-mainclass/src_main_java_com_example_App-java.txt b/src/functionalTest/resources/case-175-without-mainclass/src_main_java_com_example_App-java.txt new file mode 100644 index 0000000..ca7405b --- /dev/null +++ b/src/functionalTest/resources/case-175-without-mainclass/src_main_java_com_example_App-java.txt @@ -0,0 +1,11 @@ +package com.example; + +import org.slf4j.LoggerFactory; +import org.slf4j.Logger; + +public class App { + static final Logger logger = LoggerFactory.getLogger(App.class); + public static void main(String... args) { + logger.info("Hello"); + } +} diff --git a/src/main/java/org/mikeneck/graalvm/DefaultGenerateNativeImageConfigTask.java b/src/main/java/org/mikeneck/graalvm/DefaultGenerateNativeImageConfigTask.java index 2ac0de2..92e3e39 100644 --- a/src/main/java/org/mikeneck/graalvm/DefaultGenerateNativeImageConfigTask.java +++ b/src/main/java/org/mikeneck/graalvm/DefaultGenerateNativeImageConfigTask.java @@ -23,8 +23,10 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Nested; +import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.TaskCollection; import org.gradle.process.ExecResult; import org.jetbrains.annotations.NotNull; @@ -67,6 +69,23 @@ public DefaultGenerateNativeImageConfigTask( this.exitOnApplicationError.set(true); File buildDir = project.getBuildDir(); this.temporaryDirectory = buildDir.toPath().resolve("tmp/native-image-config").toFile(); + + TaskCollection nativeImageTasks = + project.getTasks().withType(NativeImageTask.class); + nativeImageTasks.configureEach( + nativeImageTask -> { + Provider provider = + project + .getProviders() + .provider( + () -> + nativeImageTask + .getNativeImageArguments() + .buildType() + .mainClassName() + .get()); + this.mainClass.convention(provider); + }); } @TaskAction @@ -162,6 +181,7 @@ private Provider mainClass() { @Override @Input + @Optional @NotNull public Provider getMainClass() { return mainClass; diff --git a/src/main/java/org/mikeneck/graalvm/GenerateNativeImageConfigTask.java b/src/main/java/org/mikeneck/graalvm/GenerateNativeImageConfigTask.java index ca23431..10a6764 100644 --- a/src/main/java/org/mikeneck/graalvm/GenerateNativeImageConfigTask.java +++ b/src/main/java/org/mikeneck/graalvm/GenerateNativeImageConfigTask.java @@ -10,6 +10,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Nested; +import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputDirectory; import org.jetbrains.annotations.NotNull; @@ -40,6 +41,7 @@ default void setGraalVmHome(@NotNull Path path) { boolean getExitOnApplicationError(); @Input + @Optional @NotNull Provider getMainClass();