--- old/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Jlink.java 2017-10-24 08:42:45.000000000 +0530 +++ new/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/Jlink.java 2017-10-24 08:42:45.000000000 +0530 @@ -27,7 +27,9 @@ import java.lang.module.Configuration; import java.lang.module.ModuleFinder; import java.nio.ByteOrder; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -176,7 +178,24 @@ this.modules = Objects.requireNonNull(modules); this.limitmods = Objects.requireNonNull(limitmods); this.endian = Objects.requireNonNull(endian); - this.finder = moduleFinder(); + ModuleFinder finder = moduleFinder(modulepaths, limitmods, modules); + if (! finder.find("java.base").isPresent()) { + Path sysPath = getDefaultModulePath(); + if (sysPath != null) { + this.modulepaths.add(sysPath); + } + // if java.base is still not found, error will be thrown later! + finder = moduleFinder(modulepaths, limitmods, modules); + } + this.finder = finder; + } + + /** + * @return the system module path or null + */ + public static Path getDefaultModulePath() { + Path jmods = Paths.get(System.getProperty("java.home"), "jmods"); + return Files.isDirectory(jmods)? jmods : null; } /** @@ -244,7 +263,8 @@ modules); } - private ModuleFinder moduleFinder() { + private static ModuleFinder moduleFinder(List modulepaths, + Set limitmods, Set modules) { Path[] entries = modulepaths.toArray(new Path[0]); ModuleFinder finder = ModulePath.of(Runtime.version(), true, entries); if (!limitmods.isEmpty()) {