225 return EXIT_ERROR;
226 } catch (BadArgs e) {
227 taskHelper.reportError(e.key, e.args);
228 if (e.showUsage) {
229 log.println(taskHelper.getMessage("main.usage.summary", PROGNAME));
230 }
231 return EXIT_CMDERR;
232 } catch (Throwable x) {
233 log.println(taskHelper.getMessage("main.msg.bug"));
234 x.printStackTrace(log);
235 return EXIT_ABNORMAL;
236 } finally {
237 log.flush();
238 }
239 }
240
241 private static Map<String, Path> modulesToPath(Configuration cf) {
242 Map<String, Path> modPaths = new HashMap<>();
243 for (ResolvedModule resolvedModule : cf.modules()) {
244 ModuleReference mref = resolvedModule.reference();
245 URI uri = mref.location().get();
246 modPaths.put(mref.descriptor().name(), Paths.get(uri));
247 }
248 return modPaths;
249 }
250
251 /*
252 * Jlink API entry point.
253 */
254 public static void createImage(JlinkConfiguration config,
255 PluginsConfiguration plugins)
256 throws Exception {
257 Objects.requireNonNull(config);
258 Objects.requireNonNull(config.getOutput());
259 plugins = plugins == null ? new PluginsConfiguration() : plugins;
260
261 if (config.getModulepaths().isEmpty()) {
262 throw new Exception("Empty module paths");
263 }
264 Path[] arr = new Path[config.getModulepaths().size()];
265 arr = config.getModulepaths().toArray(arr);
389 // resolve all root modules
390 Configuration cf = Configuration.empty()
391 .resolveRequires(finder,
392 ModuleFinder.empty(),
393 roots);
394
395 // module name -> reference
396 Map<String, ModuleReference> map = new HashMap<>();
397 cf.modules().forEach(m -> {
398 ModuleReference mref = m.reference();
399 map.put(mref.descriptor().name(), mref);
400 });
401
402 // set of modules that are observable
403 Set<ModuleReference> mrefs = new HashSet<>(map.values());
404
405 // add the other modules
406 for (String mod : otherMods) {
407 Optional<ModuleReference> omref = finder.find(mod);
408 if (omref.isPresent()) {
409 ModuleReference mref = omref.get();
410 map.putIfAbsent(mod, mref);
411 mrefs.add(mref);
412 } else {
413 // no need to fail
414 }
415 }
416
417 return new ModuleFinder() {
418 @Override
419 public Optional<ModuleReference> find(String name) {
420 return Optional.ofNullable(map.get(name));
421 }
422
423 @Override
424 public Set<ModuleReference> findAll() {
425 return mrefs;
426 }
427 };
428 }
429
|
225 return EXIT_ERROR;
226 } catch (BadArgs e) {
227 taskHelper.reportError(e.key, e.args);
228 if (e.showUsage) {
229 log.println(taskHelper.getMessage("main.usage.summary", PROGNAME));
230 }
231 return EXIT_CMDERR;
232 } catch (Throwable x) {
233 log.println(taskHelper.getMessage("main.msg.bug"));
234 x.printStackTrace(log);
235 return EXIT_ABNORMAL;
236 } finally {
237 log.flush();
238 }
239 }
240
241 private static Map<String, Path> modulesToPath(Configuration cf) {
242 Map<String, Path> modPaths = new HashMap<>();
243 for (ResolvedModule resolvedModule : cf.modules()) {
244 ModuleReference mref = resolvedModule.reference();
245 URI uri = mref.location().getWhenPresent();
246 modPaths.put(mref.descriptor().name(), Paths.get(uri));
247 }
248 return modPaths;
249 }
250
251 /*
252 * Jlink API entry point.
253 */
254 public static void createImage(JlinkConfiguration config,
255 PluginsConfiguration plugins)
256 throws Exception {
257 Objects.requireNonNull(config);
258 Objects.requireNonNull(config.getOutput());
259 plugins = plugins == null ? new PluginsConfiguration() : plugins;
260
261 if (config.getModulepaths().isEmpty()) {
262 throw new Exception("Empty module paths");
263 }
264 Path[] arr = new Path[config.getModulepaths().size()];
265 arr = config.getModulepaths().toArray(arr);
389 // resolve all root modules
390 Configuration cf = Configuration.empty()
391 .resolveRequires(finder,
392 ModuleFinder.empty(),
393 roots);
394
395 // module name -> reference
396 Map<String, ModuleReference> map = new HashMap<>();
397 cf.modules().forEach(m -> {
398 ModuleReference mref = m.reference();
399 map.put(mref.descriptor().name(), mref);
400 });
401
402 // set of modules that are observable
403 Set<ModuleReference> mrefs = new HashSet<>(map.values());
404
405 // add the other modules
406 for (String mod : otherMods) {
407 Optional<ModuleReference> omref = finder.find(mod);
408 if (omref.isPresent()) {
409 ModuleReference mref = omref.getWhenPresent();
410 map.putIfAbsent(mod, mref);
411 mrefs.add(mref);
412 } else {
413 // no need to fail
414 }
415 }
416
417 return new ModuleFinder() {
418 @Override
419 public Optional<ModuleReference> find(String name) {
420 return Optional.ofNullable(map.get(name));
421 }
422
423 @Override
424 public Set<ModuleReference> findAll() {
425 return mrefs;
426 }
427 };
428 }
429
|