private static Set<Node> filter(Map<ArchivePath, Node> oldNodes, Class<?>... newClasses) { Set<Node> nodes = new HashSet<Node>(); Map<String, Class<?>> classMap = toMap(newClasses); for (Node node : oldNodes.values()) { if (node.getAsset() == null) { continue; } String path = node.getPath().get(); if (path.charAt(0) == File.separatorChar) { path = path.substring(1, path.length()); } if (classMap.get(path) == null) { nodes.add(node); } } return nodes; }
public void write() { Archiver.write(generatedDir, jar, dependencies.toArray(new Class[0])); dependencies.clear(); }
public static void write(File dir, File jar, Class<?>... clazzes) { JavaArchive jarArchieve; Map<ArchivePath, Node> contents = null; if (jar.exists()) { if(OS.isWindows()){ jar.delete(); } else { JavaArchive old = ShrinkWrap.createFromZipFile(JavaArchive.class, jar); contents = old.getContent(); // TODO: windows cannot delete jar at this point (return false) // calling delete even cause NPE in shrink wrap for unknown reason jar.delete(); } } jarArchieve = ShrinkWrap.create(JavaArchive.class, jar.getName()); if (contents != null) { for (Node n : filter(contents, clazzes)) { jarArchieve.add(n.getAsset(), n.getPath()); } } for (Class<?> clazz : clazzes) { jarArchieve.addClass(clazz); } jarArchieve.as(ZipExporter.class).exportTo(jar, true); }