diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/DefaultOptionHandler.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/DefaultOptionHandler.java index 3b85870a7018..0bab4fdf4900 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/DefaultOptionHandler.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/DefaultOptionHandler.java @@ -133,6 +133,7 @@ public boolean consume(ArgumentQueue args) { nativeImage.addPlainImageBuilderArg(nativeImage.oHClass + mainClassModuleArgParts[1]); } nativeImage.addPlainImageBuilderArg(nativeImage.oHModule + mainClassModuleArgParts[0]); + nativeImage.setModuleOptionMode(true); return true; case "--configurations-path": args.poll(); diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java index 7ae4dc4c6bc0..4ca83a4705b4 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java @@ -254,6 +254,7 @@ private static String oR(OptionKey option) { private boolean diagnostics = false; String diagnosticsDir; private boolean jarOptionMode = false; + private boolean moduleOptionMode = false; private boolean dryRun = false; private String printFlagsOptionQuery = null; private String printFlagsWithExtraHelpOptionQuery = null; @@ -1177,7 +1178,7 @@ private int completeImageBuild() { String moduleMsg = USE_NI_JPMS ? " (or /)" : ""; showError("Please specify class" + moduleMsg + " containing the main entry point method. (see --help)"); } - } else { + } else if (!moduleOptionMode) { /* extraImageArgs main-class overrules previous main-class specification */ explicitMainClass = true; mainClass = extraImageArgs.remove(0); @@ -1783,6 +1784,10 @@ void setJarOptionMode(boolean val) { jarOptionMode = val; } + void setModuleOptionMode(boolean val) { + moduleOptionMode = val; + } + boolean isVerbose() { return verbose; } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGeneratorRunner.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGeneratorRunner.java index 781251aae9ae..585d1f138bc0 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGeneratorRunner.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGeneratorRunner.java @@ -338,6 +338,9 @@ private int buildImage(String[] arguments, ImageClassLoader classLoader) { .orElseThrow(() -> UserError.abort("module %s does not have a ModuleMainClass attribute, use -m /", moduleName)); } mainClass = classLoader.forName(className, mainModule); + if (mainClass == null) { + throw UserError.abort("Main entry point class '%s' not found.", className); + } } catch (ClassNotFoundException ex) { throw UserError.abort("Main entry point class '%s' not found.", className); }