22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.tools.jdeps; 27 28 import java.io.IOException; 29 import java.lang.module.ModuleDescriptor; 30 import java.util.Arrays; 31 import java.util.Comparator; 32 import java.util.HashMap; 33 import java.util.HashSet; 34 import java.util.Map; 35 import java.util.Optional; 36 import java.util.Set; 37 38 /** 39 * Build the profile information. 40 */ 41 enum Profile { 42 COMPACT1("compact1", 1, "java.compact1"), 43 COMPACT2("compact2", 2, "java.compact2"), 44 COMPACT3("compact3", 3, "java.compact3", "java.smartcardio", "jdk.sctp", 45 "jdk.httpserver", "jdk.security.auth", 46 "jdk.naming.dns", "jdk.naming.rmi", 47 "jdk.management"), 48 // need a way to determine JRE modules 49 SE_JRE("Java SE JRE", 4, "java.se", "jdk.charsets", 50 "jdk.crypto.ec", "jdk.crypto.pkcs11", 51 "jdk.crypto.mscapi", "jdk.crypto.ucrypto", 52 "jdk.localedata", "jdk.scripting.nashorn", "jdk.zipfs"), 53 FULL_JRE("Full JRE", 5, "java.se.ee", "jdk.charsets", 54 "jdk.crypto.ec", "jdk.crypto.pkcs11", 55 "jdk.crypto.mscapi", "jdk.crypto.ucrypto", "jdk.jvmstat", 56 "jdk.localedata", "jdk.scripting.nashorn", 57 "jdk.unsupported", "jdk.zipfs"); 58 59 final String name; 60 final int profile; 61 final String[] mnames; 62 final Map<String, Module> modules = new HashMap<>(); 63 64 Profile(String name, int profile, String... mnames) { 65 this.name = name; 66 this.profile = profile; 67 this.mnames = mnames; 68 } 69 70 public String profileName() { 71 return name; 72 } 73 74 @Override 75 public String toString() { 76 return mnames[0]; 77 } 78 79 public static int getProfileCount() { 80 return JDK.isEmpty() ? 0 : Profile.values().length; 81 } 82 83 Optional<Module> findModule(String name) { 84 return modules.containsKey(name) 85 ? Optional.of(modules.get(name)) 86 : Optional.empty(); 87 } 88 89 /** 90 * Returns the Profile for the given package name; null if not found. 91 */ 92 public static Profile getProfile(String pn) { 93 for (Profile p : Profile.values()) { 94 for (Module m : p.modules.values()) { 95 if (m.packages().contains(pn)) { 96 return p; 97 } 98 } 99 } 100 return null; 101 } 102 103 /* 104 * Returns the Profile for a given Module; null if not found. 105 */ 106 public static Profile getProfile(Module m) { 107 for (Profile p : Profile.values()) { 108 if (p.modules.containsValue(m)) { 120 .filter(systemModules::containsKey) 121 .map(systemModules::get) 122 .forEach(m -> p.addModule(systemModules, m))); 123 124 // JDK modules should include full JRE plus other jdk.* modules 125 // Just include all installed modules. Assume jdeps is running 126 // in JDK image 127 JDK.addAll(systemModules.values()); 128 } 129 130 private void addModule(Map<String, Module> systemModules, Module module) { 131 modules.put(module.name(), module); 132 module.descriptor().requires().stream() 133 .map(ModuleDescriptor.Requires::name) 134 .map(systemModules::get) 135 .forEach(m -> modules.put(m.name(), m)); 136 } 137 138 // for debugging 139 public static void main(String[] args) throws IOException { 140 // find platform modules 141 if (Profile.getProfileCount() == 0) { 142 System.err.println("No profile is present in this JDK"); 143 } 144 for (Profile p : Profile.values()) { 145 String profileName = p.name; 146 System.out.format("%2d: %-10s %s%n", p.profile, profileName, p.modules); 147 } 148 System.out.println("All JDK modules:-"); 149 JDK.stream().sorted(Comparator.comparing(Module::name)) 150 .forEach(m -> System.out.println(m)); 151 } 152 } | 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.tools.jdeps; 27 28 import java.io.IOException; 29 import java.lang.module.ModuleDescriptor; 30 import java.util.Arrays; 31 import java.util.Comparator; 32 import java.util.HashMap; 33 import java.util.HashSet; 34 import java.util.Map; 35 import java.util.Optional; 36 import java.util.Set; 37 38 /** 39 * Build the profile information. 40 */ 41 enum Profile { 42 COMPACT1("compact1", 1, "java.logging", 43 "java.scripting"), 44 COMPACT2("compact2", 2, "java.rmi", 45 "java.sql", 46 "java.xml", 47 "jdk.xml.dom", 48 "jdk.httpserver"), 49 COMPACT3("compact3", 3, "java.smartcardio", 50 "java.compiler", 51 "java.instrument", 52 "java.management", 53 "java.naming", 54 "java.prefs", 55 "java.security.jgss", 56 "java.security.sasl", 57 "java.sql.rowset", 58 "java.xml.crypto", 59 "jdk.management", 60 "jdk.naming.dns", 61 "jdk.naming.rmi", 62 "jdk.sctp", 63 "jdk.security.auth"); 64 65 final String name; 66 final int profile; 67 final String[] mnames; 68 final Map<String, Module> modules = new HashMap<>(); 69 70 Profile(String name, int profile, String... mnames) { 71 this.name = name; 72 this.profile = profile; 73 this.mnames = mnames; 74 } 75 76 public String profileName() { 77 return name; 78 } 79 80 @Override 81 public String toString() { 82 return mnames[0]; 83 } 84 85 public static int getProfileCount() { 86 return JDK.isEmpty() ? 0 : Profile.values().length; 87 } 88 89 /** 90 * Returns the Profile for the given package name; null if not found. 91 */ 92 public static Profile getProfile(String pn) { 93 for (Profile p : Profile.values()) { 94 for (Module m : p.modules.values()) { 95 if (m.packages().contains(pn)) { 96 return p; 97 } 98 } 99 } 100 return null; 101 } 102 103 /* 104 * Returns the Profile for a given Module; null if not found. 105 */ 106 public static Profile getProfile(Module m) { 107 for (Profile p : Profile.values()) { 108 if (p.modules.containsValue(m)) { 120 .filter(systemModules::containsKey) 121 .map(systemModules::get) 122 .forEach(m -> p.addModule(systemModules, m))); 123 124 // JDK modules should include full JRE plus other jdk.* modules 125 // Just include all installed modules. Assume jdeps is running 126 // in JDK image 127 JDK.addAll(systemModules.values()); 128 } 129 130 private void addModule(Map<String, Module> systemModules, Module module) { 131 modules.put(module.name(), module); 132 module.descriptor().requires().stream() 133 .map(ModuleDescriptor.Requires::name) 134 .map(systemModules::get) 135 .forEach(m -> modules.put(m.name(), m)); 136 } 137 138 // for debugging 139 public static void main(String[] args) throws IOException { 140 // initialize Profiles 141 new JdepsConfiguration.Builder().allModules().build(); 142 143 // find platform modules 144 if (Profile.getProfileCount() == 0) { 145 System.err.println("No profile is present in this JDK"); 146 } 147 for (Profile p : Profile.values()) { 148 String profileName = p.name; 149 System.out.format("%2d: %-10s %s%n", p.profile, profileName, p.modules); 150 } 151 System.out.println("All JDK modules:-"); 152 JDK.stream().sorted(Comparator.comparing(Module::name)) 153 .forEach(m -> System.out.println(m)); 154 } 155 } |