src/share/classes/org/openjdk/jigsaw/SimpleLibrary.java
Print this page
@@ -27,10 +27,11 @@
import java.lang.module.*;
import java.io.*;
import java.net.URI;
import java.nio.file.*;
+import java.nio.file.attribute.BasicFileAttributes;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.util.jar.*;
import java.util.zip.*;
@@ -889,11 +890,10 @@
File f = new File((File)o, path);
if (!f.exists())
return null;
return f.toURI();
}
- assert false;
return null;
}
public byte[] readLocalClass(ModuleId mid, String className)
throws IOException
@@ -1007,10 +1007,26 @@
pf.delete();
}
}
}
+ private List<Path> listFiles(Path dir) throws IOException {
+ final List<Path> files = new ArrayList<>();
+ java.nio.file.Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
+ throws IOException
+ {
+ if (!file.endsWith("module-info.class"))
+ files.add(file);
+
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ return files;
+ }
+
private void install(Manifest mf, File dst, boolean strip)
throws IOException
{
if (mf.classes().size() > 1)
throw new IllegalArgumentException("Multiple module-class"
@@ -1074,28 +1090,33 @@
return true;
}
}});
ix.store();
} else {
+ // Copy class/resource files and build index
+ Index ix = new Index(mdst);
+ Path srcPath = src.toPath();
+ List<Path> files = listFiles(srcPath);
+
+ if (!files.isEmpty()) {
try (FileOutputStream fos = new FileOutputStream(new File(mdst, "classes"));
JarOutputStream jos = new JarOutputStream(new BufferedOutputStream(fos)))
{
- // Copy class files and build index
- final Index ix = new Index(mdst);
- Files.storeTree(src, jos, isDeflated(), new Files.Filter<File>() {
- public boolean accept(File f) throws IOException {
- if (f.isDirectory())
- return true;
- if (f.getName().endsWith(".class")) {
- return addToIndex(ClassInfo.read(f), ix);
- } else {
- return true;
+ boolean deflate = isDeflated();
+ for (Path path : files) {
+ File file = path.toFile();
+ String jp = Files.convertSeparator(srcPath.relativize(path).toString());
+ try (OutputStream out = Files.newOutputStream(jos, deflate, jp)) {
+ java.nio.file.Files.copy(path, out);
}
- }});
+ if (file.getName().endsWith(".class"))
+ addToIndex(ClassInfo.read(file), ix);
+ }
+ }
+ }
ix.store();
copyModuleInfo(dst, mi, bs);
- }
if (strip)
strip(mdst);
}
}