78 79 private static final String JVM_CFG = "jvm.cfg"; 80 81 public static final String NAME = "vm"; 82 private static final String ALL = "all"; 83 private static final String CLIENT = "client"; 84 private static final String SERVER = "server"; 85 private static final String MINIMAL = "minimal"; 86 87 private Predicate<String> predicate; 88 private Jvm target; 89 private boolean keepAll; 90 91 @Override 92 public String getName() { 93 return NAME; 94 } 95 96 /** 97 * VM paths: 98 * /java.base/native/{architecture}/{server|client|minimal}/{shared lib} 99 * e.g.: /java.base/native/amd64/server/libjvm.so 100 * /java.base/native/server/libjvm.dylib 101 */ 102 private List<ResourcePoolEntry> getVMs(ResourcePoolModule javaBase, String[] jvmlibs) { 103 List<ResourcePoolEntry> ret = javaBase.entries().filter((t) -> { 104 String path = t.path(); 105 for (String jvmlib : jvmlibs) { 106 if (t.path().endsWith("/" + jvmlib)) { 107 return true; 108 } 109 } 110 return false; 111 }).collect(Collectors.toList()); 112 return ret; 113 } 114 115 @Override 116 public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { 117 ResourcePoolModule javaBase = in.moduleView().findModule("java.base").get(); 118 String[] jvmlibs = jvmlibs(javaBase.descriptor().osName().get()); 119 TreeSet<Jvm> existing = new TreeSet<>(new JvmComparator()); 120 TreeSet<Jvm> removed = new TreeSet<>(new JvmComparator()); 181 return true; 182 } 183 184 @Override 185 public String getArgumentsDescription() { 186 return PluginsResourceBundle.getArgument(NAME); 187 } 188 189 @Override 190 public void configure(Map<String, String> config) { 191 String value = config.get(NAME); 192 String exclude = ""; 193 switch (value) { 194 case ALL: { 195 // no filter. 196 keepAll = true; 197 break; 198 } 199 case CLIENT: { 200 target = Jvm.CLIENT; 201 exclude = "/java.base/native**server/**,/java.base/native**minimal/**"; 202 break; 203 } 204 case SERVER: { 205 target = Jvm.SERVER; 206 exclude = "/java.base/native**client/**,/java.base/native**minimal/**"; 207 break; 208 } 209 case MINIMAL: { 210 target = Jvm.MINIMAL; 211 exclude = "/java.base/native**server/**,/java.base/native**client/**"; 212 break; 213 } 214 default: { 215 throw new IllegalArgumentException("Unknown exclude VM option: " + value); 216 } 217 } 218 predicate = ResourceFilter.excludeFilter(exclude); 219 } 220 221 private ResourcePoolEntry handleJvmCfgFile(ResourcePoolEntry orig, 222 TreeSet<Jvm> existing, 223 TreeSet<Jvm> removed) throws IOException { 224 if (keepAll) { 225 return orig; 226 } 227 StringBuilder builder = new StringBuilder(); 228 // Keep comments 229 try (BufferedReader reader 230 = new BufferedReader(new InputStreamReader(orig.content(), 231 StandardCharsets.UTF_8))) { | 78 79 private static final String JVM_CFG = "jvm.cfg"; 80 81 public static final String NAME = "vm"; 82 private static final String ALL = "all"; 83 private static final String CLIENT = "client"; 84 private static final String SERVER = "server"; 85 private static final String MINIMAL = "minimal"; 86 87 private Predicate<String> predicate; 88 private Jvm target; 89 private boolean keepAll; 90 91 @Override 92 public String getName() { 93 return NAME; 94 } 95 96 /** 97 * VM paths: 98 * /java.base/lib/{architecture}/{server|client|minimal}/{shared lib} 99 * e.g.: /java.base/lib/server/libjvm.so 100 * /java.base/lib/server/libjvm.dylib 101 */ 102 private List<ResourcePoolEntry> getVMs(ResourcePoolModule javaBase, String[] jvmlibs) { 103 List<ResourcePoolEntry> ret = javaBase.entries().filter((t) -> { 104 String path = t.path(); 105 for (String jvmlib : jvmlibs) { 106 if (t.path().endsWith("/" + jvmlib)) { 107 return true; 108 } 109 } 110 return false; 111 }).collect(Collectors.toList()); 112 return ret; 113 } 114 115 @Override 116 public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { 117 ResourcePoolModule javaBase = in.moduleView().findModule("java.base").get(); 118 String[] jvmlibs = jvmlibs(javaBase.descriptor().osName().get()); 119 TreeSet<Jvm> existing = new TreeSet<>(new JvmComparator()); 120 TreeSet<Jvm> removed = new TreeSet<>(new JvmComparator()); 181 return true; 182 } 183 184 @Override 185 public String getArgumentsDescription() { 186 return PluginsResourceBundle.getArgument(NAME); 187 } 188 189 @Override 190 public void configure(Map<String, String> config) { 191 String value = config.get(NAME); 192 String exclude = ""; 193 switch (value) { 194 case ALL: { 195 // no filter. 196 keepAll = true; 197 break; 198 } 199 case CLIENT: { 200 target = Jvm.CLIENT; 201 exclude = "/java.base/lib**server/**,/java.base/lib**minimal/**"; 202 break; 203 } 204 case SERVER: { 205 target = Jvm.SERVER; 206 exclude = "/java.base/lib**client/**,/java.base/lib**minimal/**"; 207 break; 208 } 209 case MINIMAL: { 210 target = Jvm.MINIMAL; 211 exclude = "/java.base/lib**server/**,/java.base/lib**client/**"; 212 break; 213 } 214 default: { 215 throw new IllegalArgumentException("Unknown exclude VM option: " + value); 216 } 217 } 218 predicate = ResourceFilter.excludeFilter(exclude); 219 } 220 221 private ResourcePoolEntry handleJvmCfgFile(ResourcePoolEntry orig, 222 TreeSet<Jvm> existing, 223 TreeSet<Jvm> removed) throws IOException { 224 if (keepAll) { 225 return orig; 226 } 227 StringBuilder builder = new StringBuilder(); 228 // Keep comments 229 try (BufferedReader reader 230 = new BufferedReader(new InputStreamReader(orig.content(), 231 StandardCharsets.UTF_8))) { |