com.googlecode.d2j.tools.jar.WebApp Maven / Gradle / Ivy
The newest version!
package com.googlecode.d2j.tools.jar;
import com.googlecode.dex2jar.tools.BaseCmd;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.HashSet;
import java.util.Set;
public class WebApp {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("webapp pathToWebApp config [ignoreJarConfig]");
return;
}
File webApp = new File(args[0]);
File config = new File(args[1]);
Path jarIgnore = args.length > 2 ? new File(args[2]).toPath() : null;
Path clz = new File(webApp, "WEB-INF/classes").toPath();
Path tmpClz = new File(webApp, "WEB-INF/tmp-classes").toPath();
final InvocationWeaver ro = (InvocationWeaver) new InvocationWeaver().withConfig(config.toPath());
Files.deleteIfExists(tmpClz);
copyDirectory(clz, tmpClz);
System.out.println("InvocationWeaver from [" + tmpClz + "] to [" + clz + "]");
ro.wave(tmpClz, clz);
Files.deleteIfExists(tmpClz);
final File lib = new File(webApp, "WEB-INF/lib");
Path tmpLib = new File(webApp, "WEB-INF/Nlib").toPath();
final Set ignores = new HashSet();
if (jarIgnore != null && Files.exists(jarIgnore)) {
ignores.addAll(Files.readAllLines(jarIgnore, StandardCharsets.UTF_8));
} else {
System.out.println("ignoreJarConfig ignored");
}
Files.deleteIfExists(tmpLib);
copyDirectory(lib.toPath(), tmpLib);
Files.walkFileTree(tmpLib, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.getFileName().toString().endsWith(".jar")) {
final String s = file.getFileName().toString();
boolean ignore = false;
for (String i : ignores) {
if (s.startsWith(i)) {
ignore = true;
break;
}
}
if (!ignore) {
Path nJar = new File(lib, s).toPath();
System.out.println("InvocationWeaver from [" + file + "] to [" + nJar + "]");
ro.wave(file, nJar);
}
}
return super.visitFile(file, attrs);
}
});
Files.deleteIfExists(tmpLib);
}
private static void copyDirectory(final Path clz, final Path tmpClz) throws IOException {
Files.walkFileTree(clz, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path n = clz.relativize(file);
Path target = tmpClz.resolve(n);
BaseCmd.createParentDirectories(target);
Files.copy(file, target);
return super.visitFile(file, attrs);
}
});
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy