graalvm-native-image-plugin icon indicating copy to clipboard operation
graalvm-native-image-plugin copied to clipboard

Depricated "mainClass" property is necessary for "generateNativeImageConfig" to work

Open wgryglas opened this issue 4 years ago • 1 comments

Describe What happened

When trying to run generateNativeImage task gradle complains about Property mainClass not being initialized. The mainClass under the "nativeImage" is set via buildType { buidl->build.executable(...) }.

How To Reproduce

The following gradle.build.kts configuration causes problem unless you uncomment "mainClass = mainClassPathName"

[....]
nativeImage {
    // mainClass = mainClassPathName     ---> without this line gradle plugin can not run
    graalVmHome = getGraalVmHome()
    buildType { build ->
        build.executable {
            main = mainClassPathName
        }
    }
    executableName = project.name
    outputDirectory = file("$buildDir/$nativeImageDirName")
    arguments(
        "--no-fallback",
        "--initialize-at-run-time=org.lwjgl",
        "--native-image-info",
        "--verbose",
        "-H:TempDirectory=$buildDir/tmp/$nativeImageDirName"
    )
}
generateNativeImageConfig {
    enabled = true
    graalVmHome = getGraalVmHome()
    byRunningApplicationWithoutArguments()
}

Environment

  • OS: [e.g. Ubuntu 18.04]
  • Plugin Version [v1.4.1]
  • Gradle Version [7.1.1]
  • Java Version - 11 open jdk
  • GraalVM version [GraalVM CE 21.3.0, JAVA_VERSION="11.0.13" JAVA_VERSION_DATE="2021-10-19"]

wgryglas avatar Oct 31 '21 11:10 wgryglas

I met the same issue in my build, here is its log from my workflow run:

Some problems were found with the configuration of task ':generateNativeImageConfig' (type 'DefaultGenerateNativeImageConfigTask').
  - In plugin 'org.mikeneck.graalvm-native-image' type 'org.mikeneck.graalvm.DefaultGenerateNativeImageConfigTask' property 'javaExecutions.$0.mainClass' doesn't have a configured value.
    
    Reason: This property isn't marked as optional and no value has been configured.
    
    Possible solutions:
      1. Assign a value to 'javaExecutions.$0.mainClass'.
      2. Mark property 'javaExecutions.$0.mainClass' as optional.
    
    Please refer to https://docs.gradle.org/7.2/userguide/validation_problems.html#value_not_set for more details about this problem.

KengoTODA avatar Nov 07 '21 09:11 KengoTODA