37 import java.lang.module.ResolvedModule;
38 import java.net.URI;
39 import java.nio.ByteOrder;
40 import java.nio.file.Files;
41 import java.nio.file.Path;
42 import java.nio.file.Paths;
43 import java.util.*;
44 import java.util.stream.Collectors;
45 import java.util.stream.Stream;
46
47 import jdk.tools.jlink.internal.TaskHelper.BadArgs;
48 import static jdk.tools.jlink.internal.TaskHelper.JLINK_BUNDLE;
49 import jdk.tools.jlink.internal.Jlink.JlinkConfiguration;
50 import jdk.tools.jlink.internal.Jlink.PluginsConfiguration;
51 import jdk.tools.jlink.internal.TaskHelper.Option;
52 import jdk.tools.jlink.internal.TaskHelper.OptionsHelper;
53 import jdk.tools.jlink.internal.ImagePluginStack.ImageProvider;
54 import jdk.tools.jlink.plugin.PluginException;
55 import jdk.tools.jlink.builder.DefaultImageBuilder;
56 import jdk.tools.jlink.plugin.Plugin;
57 import jdk.internal.module.Checks;
58 import jdk.internal.module.ModulePath;
59 import jdk.internal.module.ModuleResolution;
60
61 /**
62 * Implementation for the jlink tool.
63 *
64 * ## Should use jdk.joptsimple some day.
65 */
66 public class JlinkTask {
67 static final boolean DEBUG = Boolean.getBoolean("jlink.debug");
68
69 // jlink API ignores by default. Remove when signing is implemented.
70 static final boolean IGNORE_SIGNING_DEFAULT = true;
71
72 private static final TaskHelper taskHelper
73 = new TaskHelper(JLINK_BUNDLE);
74
75 private static final Option<?>[] recognizedOptions = {
76 new Option<JlinkTask>(false, (task, opt, arg) -> {
77 task.options.help = true;
406 return Paths.get(uri);
407 }
408
409 private static ImageProvider createImageProvider(ModuleFinder finder,
410 Set<String> roots,
411 ByteOrder order,
412 Path retainModulesPath,
413 boolean ignoreSigning,
414 PrintWriter log)
415 throws IOException
416 {
417 if (roots.isEmpty()) {
418 throw new IllegalArgumentException("empty modules and limitmods");
419 }
420
421 Configuration cf = Configuration.empty()
422 .resolve(finder,
423 ModuleFinder.of(),
424 roots);
425
426 // emit warning for modules that end with a digit
427 cf.modules().stream()
428 .map(ResolvedModule::name)
429 .filter(mn -> !Checks.hasLegalModuleNameLastCharacter(mn))
430 .forEach(mn -> System.err.println("WARNING: Module name \""
431 + mn + "\" may soon be illegal"));
432
433 // emit a warning for any incubating modules in the configuration
434 if (log != null) {
435 String im = cf.modules()
436 .stream()
437 .map(ResolvedModule::reference)
438 .filter(ModuleResolution::hasIncubatingWarning)
439 .map(ModuleReference::descriptor)
440 .map(ModuleDescriptor::name)
441 .collect(Collectors.joining(", "));
442
443 if (!"".equals(im))
444 log.println("WARNING: Using incubator modules: " + im);
445 }
446
447 Map<String, Path> mods = cf.modules().stream()
448 .collect(Collectors.toMap(ResolvedModule::name, JlinkTask::toPathLocation));
449 return new ImageHelper(cf, mods, order, retainModulesPath, ignoreSigning);
450 }
451
452 /*
|
37 import java.lang.module.ResolvedModule;
38 import java.net.URI;
39 import java.nio.ByteOrder;
40 import java.nio.file.Files;
41 import java.nio.file.Path;
42 import java.nio.file.Paths;
43 import java.util.*;
44 import java.util.stream.Collectors;
45 import java.util.stream.Stream;
46
47 import jdk.tools.jlink.internal.TaskHelper.BadArgs;
48 import static jdk.tools.jlink.internal.TaskHelper.JLINK_BUNDLE;
49 import jdk.tools.jlink.internal.Jlink.JlinkConfiguration;
50 import jdk.tools.jlink.internal.Jlink.PluginsConfiguration;
51 import jdk.tools.jlink.internal.TaskHelper.Option;
52 import jdk.tools.jlink.internal.TaskHelper.OptionsHelper;
53 import jdk.tools.jlink.internal.ImagePluginStack.ImageProvider;
54 import jdk.tools.jlink.plugin.PluginException;
55 import jdk.tools.jlink.builder.DefaultImageBuilder;
56 import jdk.tools.jlink.plugin.Plugin;
57 import jdk.internal.module.ModulePath;
58 import jdk.internal.module.ModuleResolution;
59
60 /**
61 * Implementation for the jlink tool.
62 *
63 * ## Should use jdk.joptsimple some day.
64 */
65 public class JlinkTask {
66 static final boolean DEBUG = Boolean.getBoolean("jlink.debug");
67
68 // jlink API ignores by default. Remove when signing is implemented.
69 static final boolean IGNORE_SIGNING_DEFAULT = true;
70
71 private static final TaskHelper taskHelper
72 = new TaskHelper(JLINK_BUNDLE);
73
74 private static final Option<?>[] recognizedOptions = {
75 new Option<JlinkTask>(false, (task, opt, arg) -> {
76 task.options.help = true;
405 return Paths.get(uri);
406 }
407
408 private static ImageProvider createImageProvider(ModuleFinder finder,
409 Set<String> roots,
410 ByteOrder order,
411 Path retainModulesPath,
412 boolean ignoreSigning,
413 PrintWriter log)
414 throws IOException
415 {
416 if (roots.isEmpty()) {
417 throw new IllegalArgumentException("empty modules and limitmods");
418 }
419
420 Configuration cf = Configuration.empty()
421 .resolve(finder,
422 ModuleFinder.of(),
423 roots);
424
425 // emit a warning for any incubating modules in the configuration
426 if (log != null) {
427 String im = cf.modules()
428 .stream()
429 .map(ResolvedModule::reference)
430 .filter(ModuleResolution::hasIncubatingWarning)
431 .map(ModuleReference::descriptor)
432 .map(ModuleDescriptor::name)
433 .collect(Collectors.joining(", "));
434
435 if (!"".equals(im))
436 log.println("WARNING: Using incubator modules: " + im);
437 }
438
439 Map<String, Path> mods = cf.modules().stream()
440 .collect(Collectors.toMap(ResolvedModule::name, JlinkTask::toPathLocation));
441 return new ImageHelper(cf, mods, order, retainModulesPath, ignoreSigning);
442 }
443
444 /*
|