< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JlinkTask.java

Print this page

        

*** 249,262 **** --- 249,271 ---- if (taskHelper.getExistingImage() != null) { postProcessOnly(taskHelper.getExistingImage()); return EXIT_OK; } + + if (options.modulePath.isEmpty()) { + // no --module-path specified - try to set $JAVA_HOME/jmods if that exists + Path jmods = getDefaultModulePath(); + if (jmods != null) { + options.modulePath.add(jmods); + } + if (options.modulePath.isEmpty()) { throw taskHelper.newBadArgs("err.modulepath.must.be.specified") .showUsage(true); } + } JlinkConfiguration config = initJlinkConfig(); if (options.suggestProviders) { suggestProviders(config, remaining); } else {
*** 364,378 **** } else { roots.add(mod); } } return new JlinkConfiguration(options.output, - options.modulePath, roots, ! options.limitMods, ! options.endian); } private void createImage(JlinkConfiguration config) throws Exception { if (options.output == null) { throw taskHelper.newBadArgs("err.output.must.be.specified").showUsage(true); --- 373,395 ---- } else { roots.add(mod); } } + ModuleFinder finder = newModuleFinder(options.modulePath, options.limitMods, roots); + if (!finder.find("java.base").isPresent()) { + Path defModPath = getDefaultModulePath(); + if (defModPath != null) { + options.modulePath.add(defModPath); + } + finder = newModuleFinder(options.modulePath, options.limitMods, roots); + } + return new JlinkConfiguration(options.output, roots, ! options.endian, ! finder); } private void createImage(JlinkConfiguration config) throws Exception { if (options.output == null) { throw taskHelper.newBadArgs("err.output.must.be.specified").showUsage(true);
*** 396,421 **** //Ask the stack to proceed stack.operate(imageProvider); } /* * Returns a module finder of the given module path that limits * the observable modules to those in the transitive closure of * the modules specified in {@code limitMods} plus other modules * specified in the {@code roots} set. */ public static ModuleFinder newModuleFinder(List<Path> paths, Set<String> limitMods, Set<String> roots) { Path[] entries = paths.toArray(new Path[0]); ModuleFinder finder = ModulePath.of(Runtime.version(), true, entries); // if limitmods is specified then limit the universe ! if (!limitMods.isEmpty()) { ! finder = limitFinder(finder, limitMods, roots); } return finder; } private static Path toPathLocation(ResolvedModule m) { --- 413,449 ---- //Ask the stack to proceed stack.operate(imageProvider); } + /** + * @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; + } + /* * Returns a module finder of the given module path that limits * the observable modules to those in the transitive closure of * the modules specified in {@code limitMods} plus other modules * specified in the {@code roots} set. */ public static ModuleFinder newModuleFinder(List<Path> paths, Set<String> limitMods, Set<String> roots) { + if (Objects.requireNonNull(paths).isEmpty()) { + throw new IllegalArgumentException("Empty module path"); + } Path[] entries = paths.toArray(new Path[0]); ModuleFinder finder = ModulePath.of(Runtime.version(), true, entries); // if limitmods is specified then limit the universe ! if (limitMods != null && !limitMods.isEmpty()) { ! finder = limitFinder(finder, limitMods, Objects.requireNonNull(roots)); } return finder; } private static Path toPathLocation(ResolvedModule m) {
< prev index next >