--- old/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java 2016-08-29 17:14:09.000000000 +0530 +++ new/src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java 2016-08-29 17:14:08.000000000 +0530 @@ -90,11 +90,9 @@ private static List createArgs(Path home) { Objects.requireNonNull(home); - List javaArgs = new ArrayList<>(); Path binDir = home.resolve("bin"); String java = Files.exists(binDir.resolve("java"))? "java" : "java.exe"; - javaArgs.add(binDir.resolve(java).toString()); - return Collections.unmodifiableList(javaArgs); + return List.of(binDir.resolve(java).toString()); } @Override @@ -209,7 +207,11 @@ } } - prepareApplicationFiles(files, modules); + // If native files are stripped completely, /bin dir won't exist! + // So, don't bother generating launcher scripts. + if (Files.isDirectory(root.resolve("bin"))) { + prepareApplicationFiles(files, modules); + } } catch (IOException ex) { throw new PluginException(ex); } @@ -229,7 +231,7 @@ this.targetOsName = props.getProperty("OS_NAME"); if (this.targetOsName == null) { - throw new RuntimeException("can't determine target OS from java.base descriptor"); + throw new PluginException("TargetPlatform attribute is missing for java.base module"); } Optional release = pool.findEntry("/java.base/release");