protected Runnable copyIncludesToTemporaryDirectory() throws IOException { Map<String, URL> inclusions = resolveInclusions(); File includesDir = JavaCL.createTempDirectory("includes", "", "includes"); final List<File> filesToDelete = new ArrayList<File>(); for (Map.Entry<String, URL> e : inclusions.entrySet()) { assert log( Level.INFO, "Copying include '" + e.getKey() + "' from '" + e.getValue() + "' to '" + includesDir + "'"); File f = new File(includesDir, e.getKey().replace('/', File.separatorChar)); File p = f.getParentFile(); filesToDelete.add(f); if (p != null) { p.mkdirs(); filesToDelete.add(p); } InputStream in = e.getValue().openStream(); OutputStream out = new FileOutputStream(f); IOUtils.readWrite(in, out); in.close(); out.close(); f.deleteOnExit(); } filesToDelete.add(includesDir); addInclude(includesDir.toString()); return new Runnable() { public void run() { for (File f : filesToDelete) f.delete(); } }; }