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();