From 07df2c2009374cef02586c3ea4e66213e161046e Mon Sep 17 00:00:00 2001 From: ivan-ristovic Date: Fri, 23 Jul 2021 20:18:12 +0200 Subject: [PATCH 1/2] Fix image name argument parsing when combined with -m option --- .../src/com/oracle/svm/driver/DefaultOptionHandler.java | 1 + .../src/com/oracle/svm/driver/NativeImage.java | 7 ++++++- .../com/oracle/svm/hosted/NativeImageGeneratorRunner.java | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) 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..94676827ddde 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; @@ -1165,7 +1166,7 @@ private int completeImageBuild() { } } - if (!jarOptionMode) { + if (!jarOptionMode && !moduleOptionMode) { /* Main-class from customImageBuilderArgs counts as explicitMainClass */ boolean explicitMainClass = getHostedOptionFinalArgumentValue(customImageBuilderArgs, oHClass) != null; String mainClassModule = getHostedOptionFinalArgumentValue(imageBuilderArgs, oHModule); @@ -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); } From 22fe9eb04bda7ae4d707bda56d9f5a9d829195f9 Mon Sep 17 00:00:00 2001 From: ivan-ristovic Date: Tue, 31 Aug 2021 16:55:17 +0200 Subject: [PATCH 2/2] Ensure that only overrules are skipped when --module option is present --- .../src/com/oracle/svm/driver/NativeImage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 94676827ddde..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 @@ -1166,7 +1166,7 @@ private int completeImageBuild() { } } - if (!jarOptionMode && !moduleOptionMode) { + if (!jarOptionMode) { /* Main-class from customImageBuilderArgs counts as explicitMainClass */ boolean explicitMainClass = getHostedOptionFinalArgumentValue(customImageBuilderArgs, oHClass) != null; String mainClassModule = getHostedOptionFinalArgumentValue(imageBuilderArgs, oHModule); @@ -1178,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);