< prev index next >

test/tools/pack200/Utils.java

Print this page

        

*** 30,46 **** --- 30,54 ---- import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; + import java.net.URI; + import java.net.URL; import java.nio.charset.Charset; + import java.nio.file.attribute.BasicFileAttributes; + import java.nio.file.FileSystem; + import java.nio.file.FileSystems; + import java.nio.file.FileVisitResult; + import java.nio.file.FileVisitor; import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; + import java.util.HashMap; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; import java.util.jar.Pack200; import java.util.zip.ZipEntry; import java.util.zip.ZipFile;
*** 560,590 **** cmd + " exists and is executable"); } return cmd; } ! static File createRtJar() throws IOException { ! File libDir = new File(JavaHome, "lib"); ! File modules = new File(libDir, "modules"); ! List<String> cmdList = new ArrayList<>(); ! cmdList.add(getJimageCmd()); ! cmdList.add("extract"); ! cmdList.add(modules.getAbsolutePath()); ! cmdList.add("--dir"); ! cmdList.add("out"); ! runExec(cmdList); ! File rtJar = new File("rt.jar"); ! cmdList.clear(); ! cmdList.add(getJarCmd()); ! // cmdList.add("cvf"); too noisy ! cmdList.add("cf"); ! cmdList.add(rtJar.getName()); ! cmdList.add("-C"); ! cmdList.add("out"); ! cmdList.add("."); ! runExec(cmdList); ! ! recursiveDelete(new File("out")); return rtJar; } } --- 568,637 ---- cmd + " exists and is executable"); } return cmd; } ! static File createRtJar() throws Exception { File rtJar = new File("rt.jar"); ! new JrtToZip(rtJar).run(); return rtJar; } + + /* + * A helper class to create a pseudo rt.jar. + */ + static class JrtToZip { + + final File outFile; + + public static void main(String[] args) throws Exception { + new JrtToZip(new File(args[0])).run(); + } + + JrtToZip(File outFile) throws Exception { + this.outFile = outFile; + } + + void run() throws Exception { + URI uri = URI.create("jar:file:///" + outFile.getAbsolutePath().replace("\\", "/")); + Map<String, String> env = new HashMap<>(); + env.put("create", "true"); + try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) { + toZipfs(zipfs); + } + } + + void toZipfs(FileSystem zipfs) throws Exception { + FileSystem jrtfs = FileSystems.getFileSystem(new URL("jrt:/").toURI()); + for (Path p : jrtfs.getRootDirectories()) { + Files.walkFileTree(p, new FileVisitor<Path>() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + // all we need are all the classes in the JDK + if (file.toString().endsWith(".class")) { + // System.out.println("extracting: " + file); + Path zpath = zipfs.getPath(file.toString()); + Files.createDirectories(zpath.getParent()); + Files.copy(file, zpath, REPLACE_EXISTING); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; + } + }); + } + } + } }
< prev index next >