From 494d83ae92d2e3b81a25ee8f24bb7ce041022643 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 17:36:05 +0400 Subject: [PATCH 01/16] Binary logic changes. --- .../binary/JARLauncherBinary.java | 24 ++++++ .../launchserver/binary/ProguardConf.java | 10 +-- .../binary/tasks/MainBuildTask.java | 17 ++-- .../binary/tasks/ProGuardBuildTask.java | 13 ++-- .../binary/tasks/StripLineNumbersTask.java | 4 +- .../binary/tasks/api/AttachJarsTask.java | 78 +++++++++++++++++++ .../binary/tasks/api/TaskUtil.java | 62 +++++++++++++++ .../java/ru/gravit/utils/HTTPRequest.java | 6 +- .../java/ru/gravit/utils/HttpDownloader.java | 2 +- .../java/ru/gravit/utils/NativeJVMHalt.java | 2 +- .../main/java/ru/gravit/utils/Version.java | 2 +- .../ru/gravit/utils/helper/EnvHelper.java | 2 +- .../ru/gravit/utils/helper/UnpackHelper.java | 2 +- 13 files changed, 194 insertions(+), 30 deletions(-) create mode 100644 LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java create mode 100644 LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index a0caa387..31ba7dc9 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -4,6 +4,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Locale; +import java.util.concurrent.atomic.AtomicLong; import ru.gravit.launcher.Launcher; import ru.gravit.launchserver.LaunchServer; @@ -12,13 +14,16 @@ import ru.gravit.launchserver.binary.tasks.ProGuardBuildTask; import ru.gravit.launchserver.binary.tasks.StripLineNumbersTask; import ru.gravit.launchserver.binary.tasks.UnpackBuildTask; +import ru.gravit.utils.helper.CommonHelper; import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; public final class JARLauncherBinary extends LauncherBinary { public ArrayList tasks; + public final AtomicLong count; public final Path runtimeDir; public final Path guardDir; + public final Path buildDir; public JARLauncherBinary(LaunchServer server) throws IOException { super(server); @@ -27,14 +32,17 @@ public JARLauncherBinary(LaunchServer server) throws IOException { tasks.add(new MainBuildTask(server)); if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); + count = new AtomicLong(0); syncBinaryFile = server.dir.resolve(server.config.binaryName + ".jar"); runtimeDir = server.dir.resolve(Launcher.RUNTIME_DIR); guardDir = server.dir.resolve(Launcher.GUARD_DIR); + buildDir = server.dir.resolve("build"); } @Override public void build() throws IOException { LogHelper.info("Building launcher binary file"); + count.set(0); Path thisPath = null; boolean isNeedDelete = false; long time_start = System.currentTimeMillis(); @@ -55,4 +63,20 @@ public void build() throws IOException { IOHelper.move(thisPath, syncBinaryFile); LogHelper.info("Build successful from %d millis",time_end - time_start); } + + public String nextName(String taskName) { + return String.format("%s-%s-%d.jar", server.config.projectName, taskName, count.getAndIncrement()); + } + + public Path nextPath(String taskName) { + return buildDir.resolve(nextName(taskName)); + } + + public Path nextPath(LauncherBuildTask task) { + return nextPath(task.getName()); + } + + public Path nextLowerPath(LauncherBuildTask task) { + return nextPath(CommonHelper.low(task.getName())); + } } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java index df293074..62b11ea6 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java @@ -9,6 +9,7 @@ import java.nio.file.Path; import java.security.SecureRandom; import java.util.ArrayList; +import java.util.List; import ru.gravit.launchserver.LaunchServer; import ru.gravit.utils.helper.IOHelper; @@ -30,8 +31,6 @@ private static String generateString(SecureRandom rand, int il) { public final Path config; public final Path mappings; public final Path words; - public final Path outputJar; - public final ArrayList confStrs; public transient final LaunchServer srv; public ProguardConf(LaunchServer srv) { @@ -39,13 +38,11 @@ public ProguardConf(LaunchServer srv) { config = proguard.resolve("proguard.config"); mappings = proguard.resolve("mappings.pro"); words = proguard.resolve("random.pro"); - outputJar = srv.dir.resolve(srv.config.binaryName + "-obfPre.jar"); - confStrs = new ArrayList<>(); this.srv = srv; } - public void buildConfig(Path inputJar) + public String[] buildConfig(Path inputJar, Path outputJar) { - confStrs.clear(); + List confStrs = new ArrayList<>(); prepare(false); if (srv.config.genMappings) confStrs.add("-printmapping \'" + mappings.toFile().getName() + "\'"); confStrs.add("-obfuscationdictionary \'" + words.toFile().getName() + "\'"); @@ -53,6 +50,7 @@ public void buildConfig(Path inputJar) confStrs.add("-outjar \'" + outputJar.toAbsolutePath() + "\'"); confStrs.add("-classobfuscationdictionary \'" + words.toFile().getName() + "\'"); confStrs.add(readConf()); + return confStrs.toArray(new String[0]); } private void genConfig(boolean force) throws IOException { diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java index 27d7f654..82e90cbb 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java @@ -31,8 +31,6 @@ import ru.gravit.utils.helper.SecurityHelper; public class MainBuildTask implements LauncherBuildTask { - public final Path binaryFile; - public Path cleanJar; private final LaunchServer server; public final ClassMetadataReader reader; private final class RuntimeDirVisitor extends SimpleFileVisitor { @@ -105,7 +103,6 @@ private static ZipEntry newGuardEntry(String fileName) { public MainBuildTask(LaunchServer srv) { server = srv; - binaryFile = server.dir.resolve(server.config.binaryName + "-main.jar"); reader = new ClassMetadataReader(); } @@ -115,11 +112,11 @@ public String getName() { } @Override - public Path process(Path cleanJar) throws IOException { - this.cleanJar = cleanJar; - try (ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(binaryFile)); + public Path process(Path inputJar) throws IOException { + Path outputJar = server.launcherBinary.nextPath("main"); + try (ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(outputJar)); JAConfigurator jaConfigurator = new JAConfigurator(AutogenConfig.class.getName(), this)) { - jaConfigurator.pool.insertClassPath(cleanJar.toFile().getAbsolutePath()); + jaConfigurator.pool.insertClassPath(inputJar.toFile().getAbsolutePath()); BuildContext context = new BuildContext(output, jaConfigurator, this); server.buildHookManager.hook(context); jaConfigurator.setAddress(server.config.getAddress()); @@ -131,8 +128,8 @@ public Path process(Path cleanJar) throws IOException { jaConfigurator.setDownloadJava(server.config.isDownloadJava); jaConfigurator.setEnv(server.config.env); server.buildHookManager.registerAllClientModuleClass(jaConfigurator); - reader.getCp().add(new JarFile(cleanJar.toFile())); - try (ZipInputStream input = new ZipInputStream(IOHelper.newInput(cleanJar))) { + reader.getCp().add(new JarFile(inputJar.toFile())); + try (ZipInputStream input = new ZipInputStream(IOHelper.newInput(inputJar))) { ZipEntry e = input.getNextEntry(); while (e != null) { String filename = e.getName(); @@ -196,7 +193,7 @@ public Path process(Path cleanJar) throws IOException { LogHelper.error(e); } reader.close(); - return binaryFile; + return outputJar; } @Override diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java index 72366ea2..7785d70b 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java @@ -8,6 +8,7 @@ import proguard.ParseException; import proguard.ProGuard; import ru.gravit.launchserver.LaunchServer; +import ru.gravit.utils.helper.LogHelper; public class ProGuardBuildTask implements LauncherBuildTask { private final LaunchServer server; @@ -23,18 +24,18 @@ public String getName() { @Override public Path process(Path inputFile) throws IOException { - Configuration proguard_cfg = new Configuration(); - server.proguardConf.buildConfig(inputFile); - ConfigurationParser parser = new ConfigurationParser(server.proguardConf.confStrs.toArray(new String[0]), + Path outputJar = server.launcherBinary.nextLowerPath(this); + Configuration proguard_cfg = new Configuration(); + ConfigurationParser parser = new ConfigurationParser(server.proguardConf.buildConfig(inputFile, outputJar), server.proguardConf.proguard.toFile(), System.getProperties()); try { parser.parse(proguard_cfg); ProGuard proGuard = new ProGuard(proguard_cfg); proGuard.execute(); - } catch (ParseException e1) { - e1.printStackTrace(); + } catch (ParseException e) { + LogHelper.error(e); } - return server.proguardConf.outputJar; + return outputJar; } @Override diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java index d8baa571..35b064ee 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java @@ -25,12 +25,12 @@ public StripLineNumbersTask(LaunchServer server) { @Override public String getName() { - return "Strip debug task"; + return "StripDebug"; } @Override public Path process(Path inputFile) throws IOException { - Path out = server.dir.resolve(server.config.projectName + "-stripped.jar"); + Path out = server.launcherBinary.nextPath("stripped"); try (ClassMetadataReader reader = new ClassMetadataReader()) { reader.getCp().add(new JarFile(inputFile.toFile())); try (ZipInputStream input = IOHelper.newZipInput(inputFile); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java new file mode 100644 index 00000000..cbbb302a --- /dev/null +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java @@ -0,0 +1,78 @@ +package ru.gravit.launchserver.binary.tasks.api; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.jar.JarFile; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import ru.gravit.launchserver.LaunchServer; +import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; +import ru.gravit.utils.helper.IOHelper; + +public class AttachJarsTask implements LauncherBuildTask { + + private final LaunchServer srv; + private final List jars; + private final List exclusions; + + public AttachJarsTask(LaunchServer srv) { + this.srv = srv; + jars = new ArrayList<>(); + exclusions = new ArrayList<>(); + } + + @Override + public String getName() { + return "AttachJars"; + } + + @Override + public Path process(Path inputFile) throws IOException { + Path outputFile = srv.launcherBinary.nextPath("attached"); + try (ZipInputStream input = IOHelper.newZipInput(inputFile); + ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(outputFile))) { + ZipEntry e = input.getNextEntry(); + while (e != null) { + output.putNextEntry(IOHelper.newZipEntry(e)); + IOHelper.transfer(input, output); + e = input.getNextEntry(); + } + attach(output); + } + return outputFile; + } + + private void attach(ZipOutputStream output) throws IOException { + for (Path p : jars) { + try (ZipInputStream input = IOHelper.newZipInput(p)) { + ZipEntry e = input.getNextEntry(); + while (e != null) { + String filename = e.getName(); + if (exclusions.stream().noneMatch(exc -> filename.startsWith(exc))) { + output.putNextEntry(IOHelper.newZipEntry(e)); + IOHelper.transfer(input, output); + } + e = input.getNextEntry(); + } + } + } + } + + @Override + public boolean allowDelete() { + return true; + } + + public List getJars() { + return jars; + } + + public List getExclusions() { + return exclusions; + } +} diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java new file mode 100644 index 00000000..0bc81a6e --- /dev/null +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java @@ -0,0 +1,62 @@ +package ru.gravit.launchserver.binary.tasks.api; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; + +public final class TaskUtil { + public static void addCounted(List tasks, int count, Predicate pred, LauncherBuildTask taskAdd) { + List indexes = new ArrayList<>(); + tasks.stream().filter(pred).forEach(e -> { + indexes.add(tasks.indexOf(e)+count); + }); + indexes.forEach(e -> { + tasks.add(e, taskAdd); + }); + } + + public static void replaceCounted(List tasks, int count, Predicate pred, LauncherBuildTask taskRep) { + List indexes = new ArrayList<>(); + tasks.stream().filter(pred).forEach(e -> { + indexes.add(tasks.indexOf(e)+count); + }); + indexes.forEach(e -> { + tasks.set(e, taskRep); + }); + } + + public static void addPre(List tasks, Predicate pred, LauncherBuildTask taskAdd) { + addCounted(tasks, -1, pred, taskAdd); + } + + public static void add(List tasks, Predicate pred, LauncherBuildTask taskAdd) { + addCounted(tasks, 0, pred, taskAdd); + } + + public static void addAfter(List tasks, Predicate pred, LauncherBuildTask taskAdd) { + addCounted(tasks, 1, pred, taskAdd); + } + + public static void replacePre(List tasks, Predicate pred, LauncherBuildTask taskRep) { + replaceCounted(tasks, -1, pred, taskRep); + } + + public static void replace(List tasks, Predicate pred, LauncherBuildTask taskRep) { + replaceCounted(tasks, 0, pred, taskRep); + } + + public static void replaceAfter(List tasks, Predicate pred, LauncherBuildTask taskRep) { + replaceCounted(tasks, 1, pred, taskRep); + } + + public static List getTaskByClass(List tasks, Class taskClass) { + return tasks.stream().filter(taskClass::isInstance).map(taskClass::cast).collect(Collectors.toList()); + } + + private TaskUtil() { + } +} diff --git a/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java b/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java index 868de75c..55627a3a 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java +++ b/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java @@ -13,7 +13,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -public class HTTPRequest { +public final class HTTPRequest { private static final int TIMEOUT = 10000; private static final JsonParser parser = new JsonParser(); @@ -61,4 +61,8 @@ public static JsonElement jsonRequest(JsonElement request, URL url) throws IOExc JsonElement content = parser.parse(reader); return content; } + + private HTTPRequest() { + } +} } diff --git a/libLauncher/src/main/java/ru/gravit/utils/HttpDownloader.java b/libLauncher/src/main/java/ru/gravit/utils/HttpDownloader.java index a73bca13..504f8f3f 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/HttpDownloader.java +++ b/libLauncher/src/main/java/ru/gravit/utils/HttpDownloader.java @@ -13,7 +13,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -public class HttpDownloader extends Observable { +public final class HttpDownloader extends Observable { public static final int BUFER_SIZE = 8192; public static final int INTERVAL = 300; public AtomicInteger writed = new AtomicInteger(0); diff --git a/libLauncher/src/main/java/ru/gravit/utils/NativeJVMHalt.java b/libLauncher/src/main/java/ru/gravit/utils/NativeJVMHalt.java index 9d067daf..728e82be 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/NativeJVMHalt.java +++ b/libLauncher/src/main/java/ru/gravit/utils/NativeJVMHalt.java @@ -2,7 +2,7 @@ import ru.gravit.utils.helper.LogHelper; -public class NativeJVMHalt { +public final class NativeJVMHalt { public NativeJVMHalt(int haltCode) { this.haltCode = haltCode; LogHelper.error("JVM exit code %d", haltCode); diff --git a/libLauncher/src/main/java/ru/gravit/utils/Version.java b/libLauncher/src/main/java/ru/gravit/utils/Version.java index 2d189c7e..5795a7a8 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/Version.java +++ b/libLauncher/src/main/java/ru/gravit/utils/Version.java @@ -4,7 +4,7 @@ import java.util.Objects; -public class Version { +public final class Version { @LauncherAPI public final int major; @LauncherAPI diff --git a/libLauncher/src/main/java/ru/gravit/utils/helper/EnvHelper.java b/libLauncher/src/main/java/ru/gravit/utils/helper/EnvHelper.java index 175cae96..dfe0b35f 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/helper/EnvHelper.java +++ b/libLauncher/src/main/java/ru/gravit/utils/helper/EnvHelper.java @@ -3,7 +3,7 @@ import java.util.Locale; import java.util.Map; -public class EnvHelper { +public final class EnvHelper { public static final String[] toTest = {"_JAVA_OPTIONS", "_JAVA_OPTS", "JAVA_OPTS", "JAVA_OPTIONS"}; public static void addEnv(ProcessBuilder builder) { diff --git a/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java b/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java index 40dc0212..460630cd 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java +++ b/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java @@ -10,7 +10,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -public class UnpackHelper { +public final class UnpackHelper { public static boolean unpack(URL resource, Path target) throws IOException { if (IOHelper.isFile(target)) { if (matches(target, resource)) return false; From d250b6432ce6c18f4d8d8e1bba671d589659249e Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 17:39:49 +0400 Subject: [PATCH 02/16] Errors fix. --- .../main/java/ru/gravit/launchserver/binary/JAConfigurator.java | 1 - .../java/ru/gravit/launchserver/binary/JARLauncherBinary.java | 1 - .../ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java | 2 -- .../java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java | 1 - 4 files changed, 5 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JAConfigurator.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JAConfigurator.java index f893eab2..26084680 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JAConfigurator.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JAConfigurator.java @@ -23,7 +23,6 @@ public class JAConfigurator implements AutoCloseable { public JAConfigurator(String configclass, MainBuildTask jarLauncherBinary) throws NotFoundException { pool = new ClassPool(false); - pool.insertClassPath(jarLauncherBinary.cleanJar.toFile().getAbsolutePath()); pool.appendSystemPath(); classname = configclass; ctClass = pool.get(classname); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 31ba7dc9..287e87ad 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -4,7 +4,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Locale; import java.util.concurrent.atomic.AtomicLong; import ru.gravit.launcher.Launcher; diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java index cbbb302a..7cce6d99 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java @@ -1,11 +1,9 @@ package ru.gravit.launchserver.binary.tasks.api; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.jar.JarFile; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java index 0bc81a6e..644706b5 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Collectors; From a238f79fe653619d20e9c49b54d900186f7949a1 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 17:41:13 +0400 Subject: [PATCH 03/16] Also fixes. --- .../launchserver/binary/JARLauncherBinary.java | 14 +++++++------- .../launchserver/binary/tasks/UnpackBuildTask.java | 2 +- .../src/main/java/ru/gravit/utils/HTTPRequest.java | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 287e87ad..24f3fae7 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -18,24 +18,24 @@ import ru.gravit.utils.helper.LogHelper; public final class JARLauncherBinary extends LauncherBinary { - public ArrayList tasks; public final AtomicLong count; public final Path runtimeDir; public final Path guardDir; public final Path buildDir; - + public ArrayList tasks; + public JARLauncherBinary(LaunchServer server) throws IOException { super(server); - tasks = new ArrayList<>(); - tasks.add(new UnpackBuildTask(server)); - tasks.add(new MainBuildTask(server)); - if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); - if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); count = new AtomicLong(0); syncBinaryFile = server.dir.resolve(server.config.binaryName + ".jar"); runtimeDir = server.dir.resolve(Launcher.RUNTIME_DIR); guardDir = server.dir.resolve(Launcher.GUARD_DIR); buildDir = server.dir.resolve("build"); + tasks = new ArrayList<>(); + tasks.add(new UnpackBuildTask(server)); + tasks.add(new MainBuildTask(server)); + if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); + if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); } @Override diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java index b4919b1a..59b43d4e 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java @@ -14,7 +14,7 @@ public class UnpackBuildTask implements LauncherBuildTask { public UnpackBuildTask(LaunchServer server) { this.server = server; - result = server.dir.resolve(server.config.binaryName + "-clean.jar"); + result = server.launcherBinary.buildDir.resolve(server.config.binaryName + "-clean.jar"); } @Override diff --git a/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java b/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java index 55627a3a..20eb5292 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java +++ b/libLauncher/src/main/java/ru/gravit/utils/HTTPRequest.java @@ -65,4 +65,3 @@ public static JsonElement jsonRequest(JsonElement request, URL url) throws IOExc private HTTPRequest() { } } -} From 5ba69c155aaa82f064041044c587e452c502a7e7 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 17:50:40 +0400 Subject: [PATCH 04/16] Delete temp files mode. --- .../src/main/java/ru/gravit/launchserver/LaunchServer.java | 7 +++++-- .../ru/gravit/launchserver/binary/JARLauncherBinary.java | 5 +++-- .../launchserver/binary/tasks/api/AttachJarsTask.java | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 6963cb9c..d87400c6 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -140,7 +140,8 @@ public static final class Config { public boolean isWarningMissArchJava; public boolean enabledProGuard; public boolean stripLineNumbers; - + public boolean deleteTempFiles; + public String startScript; @@ -576,9 +577,11 @@ private void generateConfigIfNotExists() throws IOException { newConfig.whitelistRejectString = "Вас нет в белом списке"; newConfig.threadCoreCount = 0; // on your own + newConfig.threadCount = JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() >= 4 ? JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() / 2 : JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors(); + newConfig.enabledProGuard = true; newConfig.stripLineNumbers = false; - newConfig.threadCount = JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() >= 4 ? JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() / 2 : JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors(); + newConfig.deleteTempFiles = false; // Set server address LogHelper.println("LaunchServer address: "); newConfig.setAddress(commandHandler.readLine()); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 24f3fae7..d2439615 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -54,12 +54,13 @@ public void build() throws IOException { long time_task_end = System.currentTimeMillis(); long time_task = time_task_end - time_this; time_this = time_task_end; - if (isNeedDelete) Files.delete(oldPath); + if (isNeedDelete && server.config.deleteTempFiles) Files.delete(oldPath); isNeedDelete = task.allowDelete(); LogHelper.subInfo("Task %s processed from %d millis",task.getName(), time_task); } long time_end = System.currentTimeMillis(); - IOHelper.move(thisPath, syncBinaryFile); + if (isNeedDelete && server.config.deleteTempFiles) IOHelper.move(thisPath, syncBinaryFile); + else IOHelper.copy(thisPath, syncBinaryFile); LogHelper.info("Build successful from %d millis",time_end - time_start); } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java index 7cce6d99..ab653eb4 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java @@ -51,7 +51,7 @@ private void attach(ZipOutputStream output) throws IOException { ZipEntry e = input.getNextEntry(); while (e != null) { String filename = e.getName(); - if (exclusions.stream().noneMatch(exc -> filename.startsWith(exc))) { + if (exclusions.stream().noneMatch(filename::startsWith)) { output.putNextEntry(IOHelper.newZipEntry(e)); IOHelper.transfer(input, output); } From 78def447ced686b6778f403a4951a680cdf0b920 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 17:57:01 +0400 Subject: [PATCH 05/16] Fixed launcherBinary NPE. --- .../src/main/java/ru/gravit/launchserver/LaunchServer.java | 3 +++ .../gravit/launchserver/binary/EXEL4JLauncherBinary.java | 1 - .../ru/gravit/launchserver/binary/JARLauncherBinary.java | 6 +++++- .../java/ru/gravit/launchserver/binary/LauncherBinary.java | 7 ++----- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index d87400c6..9c966a20 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -460,6 +460,9 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE // Set launcher EXE binary launcherBinary = new JARLauncherBinary(this); launcherEXEBinary = binary(); + + launcherBinary.init(); + launcherEXEBinary.init(); syncLauncherBinaries(); // Sync updates dir diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/EXEL4JLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/EXEL4JLauncherBinary.java index a70fa951..e69b17d0 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/EXEL4JLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/EXEL4JLauncherBinary.java @@ -41,7 +41,6 @@ public void clear() { public EXEL4JLauncherBinary(LaunchServer server) { super(server, server.dir.resolve(server.config.binaryName + ".exe")); faviconFile = server.dir.resolve("favicon.ico"); - //setConfig(); } @Override diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index d2439615..e05962d2 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -32,12 +32,16 @@ public JARLauncherBinary(LaunchServer server) throws IOException { guardDir = server.dir.resolve(Launcher.GUARD_DIR); buildDir = server.dir.resolve("build"); tasks = new ArrayList<>(); + } + + @Override + public void init() { tasks.add(new UnpackBuildTask(server)); tasks.add(new MainBuildTask(server)); if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); } - + @Override public void build() throws IOException { LogHelper.info("Building launcher binary file"); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/LauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/LauncherBinary.java index 63bb9f32..15adcfe2 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/LauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/LauncherBinary.java @@ -9,25 +9,20 @@ import ru.gravit.utils.helper.SecurityHelper; public abstract class LauncherBinary { - public final LaunchServer server; - public Path syncBinaryFile; private volatile DigestBytesHolder binary; private volatile byte[] sign; - protected LauncherBinary(LaunchServer server, Path binaryFile) { this.server = server; syncBinaryFile = binaryFile; } - protected LauncherBinary(LaunchServer server) { this.server = server; } - public abstract void build() throws IOException; @@ -44,6 +39,8 @@ public final byte[] getSign() { return sign; } + public void init() { + } public final boolean sync() throws IOException { boolean exists = exists(); From b984fa9d734a42c30e6b90d2ddc854c267847785 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 18:01:59 +0400 Subject: [PATCH 06/16] Next IOExc fix. --- .../java/ru/gravit/launchserver/binary/JARLauncherBinary.java | 1 + .../src/main/java/ru/gravit/utils/helper/UnpackHelper.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index e05962d2..05f594c3 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -32,6 +32,7 @@ public JARLauncherBinary(LaunchServer server) throws IOException { guardDir = server.dir.resolve(Launcher.GUARD_DIR); buildDir = server.dir.resolve("build"); tasks = new ArrayList<>(); + Files.createDirectory(buildDir); } @Override diff --git a/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java b/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java index 460630cd..75709a15 100644 --- a/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java +++ b/libLauncher/src/main/java/ru/gravit/utils/helper/UnpackHelper.java @@ -16,7 +16,7 @@ public static boolean unpack(URL resource, Path target) throws IOException { if (matches(target, resource)) return false; } Files.deleteIfExists(target); - Files.createFile(target); + IOHelper.createParentDirs(target); try (InputStream in = IOHelper.newInput(resource)) { IOHelper.transfer(in, target); } From 349bfc82fbb483125f075a55863ede1cb8dd26bb Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 18:03:28 +0400 Subject: [PATCH 07/16] Last exc fix. --- .../src/main/java/ru/gravit/launchserver/LaunchServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 9c966a20..76b7e832 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -327,6 +327,7 @@ public static void main(String... args) throws Throwable { public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecException { this.dir = dir; + Files.createDirectories(dir); this.args = Arrays.asList(args); configFile = dir.resolve("LaunchServer.conf"); publicKeyFile = dir.resolve("public.key"); From 81ef824b85ae1641c43a93a51a4e1d306dfe8705 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 18:18:35 +0400 Subject: [PATCH 08/16] Attach jars and new adding libs system p.1 --- .../ru/gravit/launchserver/LaunchServer.java | 5 ++- .../ru/gravit/launchserver/StarterAgent.java | 4 +-- .../binary/JARLauncherBinary.java | 2 ++ .../tasks/{api => }/AttachJarsTask.java | 31 ++++++++++++++++--- 4 files changed, 34 insertions(+), 8 deletions(-) rename LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/{api => }/AttachJarsTask.java (62%) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 76b7e832..f219de5e 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -260,6 +260,8 @@ public static void main(String... args) throws Throwable { public final Path dir; + public final Path launcherLibraries; + public final List args; public final Path configFile; @@ -327,7 +329,8 @@ public static void main(String... args) throws Throwable { public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecException { this.dir = dir; - Files.createDirectories(dir); + launcherLibraries = dir.resolve("launcher-libraries"); + if (!Files.isDirectory(launcherLibraries)) Files.createDirectory(launcherLibraries); this.args = Arrays.asList(args); configFile = dir.resolve("LaunchServer.conf"); publicKeyFile = dir.resolve("public.key"); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java b/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java index 30db3252..9806bbc4 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java @@ -15,9 +15,9 @@ public class StarterAgent { public static final class StarterVisitor extends SimpleFileVisitor { - private Instrumentation inst; + private final Instrumentation inst; - public StarterVisitor(Instrumentation inst) { + private StarterVisitor(Instrumentation inst) { this.inst = inst; } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 05f594c3..7c19e410 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -8,6 +8,7 @@ import ru.gravit.launcher.Launcher; import ru.gravit.launchserver.LaunchServer; +import ru.gravit.launchserver.binary.tasks.AttachJarsTask; import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; import ru.gravit.launchserver.binary.tasks.MainBuildTask; import ru.gravit.launchserver.binary.tasks.ProGuardBuildTask; @@ -40,6 +41,7 @@ public void init() { tasks.add(new UnpackBuildTask(server)); tasks.add(new MainBuildTask(server)); if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); + tasks.add(new AttachJarsTask(server)); if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java similarity index 62% rename from LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java rename to LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java index ab653eb4..f7eea802 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/AttachJarsTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java @@ -1,19 +1,37 @@ -package ru.gravit.launchserver.binary.tasks.api; +package ru.gravit.launchserver.binary.tasks; import java.io.IOException; +import java.lang.instrument.Instrumentation; +import java.nio.file.FileVisitResult; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; +import java.util.jar.JarFile; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import ru.gravit.launchserver.LaunchServer; -import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; import ru.gravit.utils.helper.IOHelper; public class AttachJarsTask implements LauncherBuildTask { + private static final class ListFileVisitor extends SimpleFileVisitor { + private final List lst; + private ListFileVisitor(List lst) { + this.lst = lst; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (file.toFile().getName().endsWith(".jar")) + lst.add(file); + return super.visitFile(file, attrs); + } + } + private final LaunchServer srv; private final List jars; private final List exclusions; @@ -40,13 +58,16 @@ public Path process(Path inputFile) throws IOException { IOHelper.transfer(input, output); e = input.getNextEntry(); } - attach(output); + List coreAttach = new ArrayList<>(); + IOHelper.walk(srv.launcherLibraries, new ListFileVisitor(coreAttach), true); + attach(output, coreAttach); + attach(output, jars); } return outputFile; } - private void attach(ZipOutputStream output) throws IOException { - for (Path p : jars) { + private void attach(ZipOutputStream output, List lst) throws IOException { + for (Path p : lst) { try (ZipInputStream input = IOHelper.newZipInput(p)) { ZipEntry e = input.getNextEntry(); while (e != null) { From de22bd3d338dd6016a09419476dd61154adcd9bf Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Tue, 8 Jan 2019 19:29:24 +0400 Subject: [PATCH 09/16] Last fix before gradle scripts update and SignerJar restore. --- .../binary/JARLauncherBinary.java | 35 +++++++++++++++---- ...ask.java => AdditionalFixesApplyTask.java} | 22 ++++++++---- .../binary/tasks/AttachJarsTask.java | 31 ++++------------ .../binary/tasks/MainBuildTask.java | 2 +- .../binary/tasks/ProGuardBuildTask.java | 31 +++++++++------- .../binary/tasks/{api => }/TaskUtil.java | 16 ++++----- 6 files changed, 78 insertions(+), 59 deletions(-) rename LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/{StripLineNumbersTask.java => AdditionalFixesApplyTask.java} (74%) rename LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/{api => }/TaskUtil.java (84%) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 7c19e410..0af66163 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -1,9 +1,13 @@ package ru.gravit.launchserver.binary; import java.io.IOException; +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.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicLong; import ru.gravit.launcher.Launcher; @@ -12,18 +16,34 @@ import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; import ru.gravit.launchserver.binary.tasks.MainBuildTask; import ru.gravit.launchserver.binary.tasks.ProGuardBuildTask; -import ru.gravit.launchserver.binary.tasks.StripLineNumbersTask; +import ru.gravit.launchserver.binary.tasks.AdditionalFixesApplyTask; import ru.gravit.launchserver.binary.tasks.UnpackBuildTask; import ru.gravit.utils.helper.CommonHelper; import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; public final class JARLauncherBinary extends LauncherBinary { + private static final class ListFileVisitor extends SimpleFileVisitor { + private final List lst; + + private ListFileVisitor(List lst) { + this.lst = lst; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (file.toFile().getName().endsWith(".jar")) + lst.add(file); + return super.visitFile(file, attrs); + } + } + public final AtomicLong count; public final Path runtimeDir; public final Path guardDir; public final Path buildDir; - public ArrayList tasks; + public List tasks; + public List coreLibs; public JARLauncherBinary(LaunchServer server) throws IOException { super(server); @@ -33,6 +53,7 @@ public JARLauncherBinary(LaunchServer server) throws IOException { guardDir = server.dir.resolve(Launcher.GUARD_DIR); buildDir = server.dir.resolve("build"); tasks = new ArrayList<>(); + coreLibs = new ArrayList<>(); Files.createDirectory(buildDir); } @@ -40,15 +61,17 @@ public JARLauncherBinary(LaunchServer server) throws IOException { public void init() { tasks.add(new UnpackBuildTask(server)); tasks.add(new MainBuildTask(server)); - if(server.config.enabledProGuard) tasks.add(new ProGuardBuildTask(server)); + tasks.add(new ProGuardBuildTask(server)); tasks.add(new AttachJarsTask(server)); - if(server.config.stripLineNumbers) tasks.add(new StripLineNumbersTask(server)); + tasks.add(new AdditionalFixesApplyTask(server)); } @Override public void build() throws IOException { LogHelper.info("Building launcher binary file"); count.set(0); + coreLibs.clear(); + IOHelper.walk(server.launcherLibraries, new ListFileVisitor(coreLibs), true); Path thisPath = null; boolean isNeedDelete = false; long time_start = System.currentTimeMillis(); @@ -61,7 +84,7 @@ public void build() throws IOException { long time_task_end = System.currentTimeMillis(); long time_task = time_task_end - time_this; time_this = time_task_end; - if (isNeedDelete && server.config.deleteTempFiles) Files.delete(oldPath); + if (isNeedDelete && server.config.deleteTempFiles) Files.deleteIfExists(oldPath); isNeedDelete = task.allowDelete(); LogHelper.subInfo("Task %s processed from %d millis",task.getName(), time_task); } @@ -72,7 +95,7 @@ public void build() throws IOException { } public String nextName(String taskName) { - return String.format("%s-%s-%d.jar", server.config.projectName, taskName, count.getAndIncrement()); + return String.format("Launcher-%s-%d.jar", server.config.projectName, taskName, count.getAndIncrement()); } public Path nextPath(String taskName) { diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AdditionalFixesApplyTask.java similarity index 74% rename from LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java rename to LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AdditionalFixesApplyTask.java index 35b064ee..0b334cbd 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/StripLineNumbersTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AdditionalFixesApplyTask.java @@ -10,33 +10,38 @@ import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.tree.ClassNode; import ru.gravit.launchserver.LaunchServer; import ru.gravit.launchserver.asm.ClassMetadataReader; import ru.gravit.launchserver.asm.SafeClassWriter; import ru.gravit.utils.helper.IOHelper; -public class StripLineNumbersTask implements LauncherBuildTask { +public class AdditionalFixesApplyTask implements LauncherBuildTask { private final LaunchServer server; - public StripLineNumbersTask(LaunchServer server) { + public AdditionalFixesApplyTask(LaunchServer server) { this.server = server; } @Override public String getName() { - return "StripDebug"; + return "AdditionalFixesApply"; } @Override public Path process(Path inputFile) throws IOException { - Path out = server.launcherBinary.nextPath("stripped"); + Path out = server.launcherBinary.nextPath("post-fixed"); try (ClassMetadataReader reader = new ClassMetadataReader()) { reader.getCp().add(new JarFile(inputFile.toFile())); try (ZipInputStream input = IOHelper.newZipInput(inputFile); ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(out))) { ZipEntry e = input.getNextEntry(); while (e != null) { + if (e.isDirectory()) { + e = input.getNextEntry(); + continue; + } String filename = e.getName(); output.putNextEntry(IOHelper.newZipEntry(e)); if (filename.endsWith(".class")) { @@ -45,7 +50,7 @@ public Path process(Path inputFile) throws IOException { IOHelper.transfer(input, outputStream); bytes = outputStream.toByteArray(); } - output.write(classFix(bytes, reader)); + output.write(classFix(bytes, reader, server.config.stripLineNumbers)); } else IOHelper.transfer(input, output); e = input.getNextEntry(); @@ -55,10 +60,13 @@ public Path process(Path inputFile) throws IOException { return out; } - private static byte[] classFix(byte[] bytes, ClassMetadataReader reader) { + private static byte[] classFix(byte[] bytes, ClassMetadataReader reader, boolean stripNumbers) { ClassReader cr = new ClassReader(bytes); + ClassNode cn = new ClassNode(); + cr.accept(cn, stripNumbers ? (ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES) : ClassReader.SKIP_FRAMES); + ClassWriter cw = new SafeClassWriter(reader, ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - cr.accept(cw, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + cn.accept(cw); return cw.toByteArray(); } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java index f7eea802..a46871be 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java @@ -1,14 +1,9 @@ package ru.gravit.launchserver.binary.tasks; import java.io.IOException; -import java.lang.instrument.Instrumentation; -import java.nio.file.FileVisitResult; import java.nio.file.Path; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; -import java.util.jar.JarFile; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; @@ -17,21 +12,6 @@ import ru.gravit.utils.helper.IOHelper; public class AttachJarsTask implements LauncherBuildTask { - private static final class ListFileVisitor extends SimpleFileVisitor { - private final List lst; - - private ListFileVisitor(List lst) { - this.lst = lst; - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (file.toFile().getName().endsWith(".jar")) - lst.add(file); - return super.visitFile(file, attrs); - } - } - private final LaunchServer srv; private final List jars; private final List exclusions; @@ -40,6 +20,7 @@ public AttachJarsTask(LaunchServer srv) { this.srv = srv; jars = new ArrayList<>(); exclusions = new ArrayList<>(); + exclusions.add("META-INF"); } @Override @@ -54,13 +35,15 @@ public Path process(Path inputFile) throws IOException { ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(outputFile))) { ZipEntry e = input.getNextEntry(); while (e != null) { + if (e.isDirectory() || srv.buildHookManager.isContainsBlacklist(e.getName())) { + e = input.getNextEntry(); + continue; + } output.putNextEntry(IOHelper.newZipEntry(e)); IOHelper.transfer(input, output); e = input.getNextEntry(); } - List coreAttach = new ArrayList<>(); - IOHelper.walk(srv.launcherLibraries, new ListFileVisitor(coreAttach), true); - attach(output, coreAttach); + attach(output, srv.launcherBinary.coreLibs); attach(output, jars); } return outputFile; @@ -72,7 +55,7 @@ private void attach(ZipOutputStream output, List lst) throws IOException { ZipEntry e = input.getNextEntry(); while (e != null) { String filename = e.getName(); - if (exclusions.stream().noneMatch(filename::startsWith)) { + if (exclusions.stream().noneMatch(filename::startsWith) && !srv.buildHookManager.isContainsBlacklist(filename)) { output.putNextEntry(IOHelper.newZipEntry(e)); IOHelper.transfer(input, output); } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java index 82e90cbb..7583ec79 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java @@ -133,7 +133,7 @@ public Path process(Path inputJar) throws IOException { ZipEntry e = input.getNextEntry(); while (e != null) { String filename = e.getName(); - if (server.buildHookManager.isContainsBlacklist(filename)) { + if (server.buildHookManager.isContainsBlacklist(filename) || e.isDirectory()) { e = input.getNextEntry(); continue; } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java index 7785d70b..9be2393d 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/ProGuardBuildTask.java @@ -8,6 +8,7 @@ import proguard.ParseException; import proguard.ProGuard; import ru.gravit.launchserver.LaunchServer; +import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; public class ProGuardBuildTask implements LauncherBuildTask { @@ -24,18 +25,24 @@ public String getName() { @Override public Path process(Path inputFile) throws IOException { - Path outputJar = server.launcherBinary.nextLowerPath(this); - Configuration proguard_cfg = new Configuration(); - ConfigurationParser parser = new ConfigurationParser(server.proguardConf.buildConfig(inputFile, outputJar), - server.proguardConf.proguard.toFile(), System.getProperties()); - try { - parser.parse(proguard_cfg); - ProGuard proGuard = new ProGuard(proguard_cfg); - proGuard.execute(); - } catch (ParseException e) { - LogHelper.error(e); - } - return outputJar; + if (server.config.enabledProGuard) { + Path outputJar = server.launcherBinary.nextLowerPath(this); + Configuration proguard_cfg = new Configuration(); + ConfigurationParser parser = new ConfigurationParser(server.proguardConf.buildConfig(inputFile, outputJar), + server.proguardConf.proguard.toFile(), System.getProperties()); + try { + parser.parse(proguard_cfg); + ProGuard proGuard = new ProGuard(proguard_cfg); + proGuard.execute(); + } catch (ParseException e) { + LogHelper.error(e); + } + return outputJar; + } else { + Path outputJar = server.launcherBinary.nextPath("non-obf"); + IOHelper.copy(inputFile, outputJar); + return outputJar; + } } @Override diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/TaskUtil.java similarity index 84% rename from LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java rename to LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/TaskUtil.java index 644706b5..8175b7e1 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/api/TaskUtil.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/TaskUtil.java @@ -1,30 +1,28 @@ -package ru.gravit.launchserver.binary.tasks.api; +package ru.gravit.launchserver.binary.tasks; import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; -import ru.gravit.launchserver.binary.tasks.LauncherBuildTask; - public final class TaskUtil { public static void addCounted(List tasks, int count, Predicate pred, LauncherBuildTask taskAdd) { - List indexes = new ArrayList<>(); + List indexes = new ArrayList<>(); tasks.stream().filter(pred).forEach(e -> { - indexes.add(tasks.indexOf(e)+count); + indexes.add(e); }); indexes.forEach(e -> { - tasks.add(e, taskAdd); + tasks.add(tasks.indexOf(e)+count, taskAdd); }); } public static void replaceCounted(List tasks, int count, Predicate pred, LauncherBuildTask taskRep) { - List indexes = new ArrayList<>(); + List indexes = new ArrayList<>(); tasks.stream().filter(pred).forEach(e -> { - indexes.add(tasks.indexOf(e)+count); + indexes.add(e); }); indexes.forEach(e -> { - tasks.set(e, taskRep); + tasks.set(tasks.indexOf(e)+count, taskRep); }); } From 59063daed38ad28423c5978f59d24837539c419b Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 12:29:54 +0400 Subject: [PATCH 10/16] Gradle build change. --- LaunchServer/build.gradle | 12 ++++--- .../ru/gravit/launchserver/LaunchServer.java | 5 ++- .../ru/gravit/launchserver/StarterAgent.java | 4 +-- .../binary/JARLauncherBinary.java | 31 +++++-------------- ...ckBuildTask.java => PrepareBuildTask.java} | 26 ++++++++++++++-- Launcher/build.gradle | 28 ++++++++++------- LauncherAPI/build.gradle | 8 ++--- ServerWrapper/build.gradle | 1 - .../gravit/launcher/server/ServerWrapper.java | 1 - build.gradle | 10 +++--- libLauncher/build.gradle | 2 +- modules | 2 +- 12 files changed, 72 insertions(+), 58 deletions(-) rename LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/{UnpackBuildTask.java => PrepareBuildTask.java} (54%) diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index ec76c121..383605f8 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -23,7 +23,7 @@ } jar { - dependsOn parent.childProjects.Launcher.tasks.build, parent.childProjects.Launcher.tasks.genRuntimeJS, parent.childProjects.Launcher.tasks.jar + dependsOn parent.childProjects.Launcher.tasks.build from { configurations.pack.collect { it.isDirectory() ? it : zipTree(it) } } from(parent.childProjects.Launcher.tasks.jar.archivePath, parent.childProjects.Launcher.tasks.genRuntimeJS.archivePath) manifest.attributes("Main-Class": mainClassName, @@ -60,8 +60,6 @@ pack project(':libLauncher') // pack compileOnly('net.sf.launch4j:launch4j:3.12') { // need user exclude group: '*' } - - //compile 'org.mozilla:rhino:1.7.10' will be module } task hikari(type: Copy) { @@ -75,4 +73,10 @@ task dumpLibs(type: Copy) { from configurations.bundleOnly } -build.dependsOn tasks.dumpLibs +task dumpClientLibs(type: Copy) { + dependsOn parent.childProjects.Launcher.tasks.build + into "$buildDir/libs/launcher-libraries" + from parent.childProjects.Launcher.tasks.dumpLibs.destinationDir +} + +build.dependsOn tasks.dumpLibs, tasks.dumpClientLibs diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index f219de5e..2c12a91b 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -330,7 +330,10 @@ public static void main(String... args) throws Throwable { public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecException { this.dir = dir; launcherLibraries = dir.resolve("launcher-libraries"); - if (!Files.isDirectory(launcherLibraries)) Files.createDirectory(launcherLibraries); + if (!Files.isDirectory(launcherLibraries)) { + Files.deleteIfExists(launcherLibraries); + Files.createDirectory(launcherLibraries); + } this.args = Arrays.asList(args); configFile = dir.resolve("LaunchServer.conf"); publicKeyFile = dir.resolve("public.key"); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java b/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java index 9806bbc4..9f6fb300 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/StarterAgent.java @@ -12,9 +12,9 @@ import java.util.Collections; import java.util.jar.JarFile; -public class StarterAgent { +public final class StarterAgent { - public static final class StarterVisitor extends SimpleFileVisitor { + private static final class StarterVisitor extends SimpleFileVisitor { private final Instrumentation inst; private StarterVisitor(Instrumentation inst) { diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index 0af66163..ba79df3d 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -1,11 +1,8 @@ package ru.gravit.launchserver.binary; import java.io.IOException; -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.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; @@ -17,27 +14,12 @@ import ru.gravit.launchserver.binary.tasks.MainBuildTask; import ru.gravit.launchserver.binary.tasks.ProGuardBuildTask; import ru.gravit.launchserver.binary.tasks.AdditionalFixesApplyTask; -import ru.gravit.launchserver.binary.tasks.UnpackBuildTask; +import ru.gravit.launchserver.binary.tasks.PrepareBuildTask; import ru.gravit.utils.helper.CommonHelper; import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; public final class JARLauncherBinary extends LauncherBinary { - private static final class ListFileVisitor extends SimpleFileVisitor { - private final List lst; - - private ListFileVisitor(List lst) { - this.lst = lst; - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (file.toFile().getName().endsWith(".jar")) - lst.add(file); - return super.visitFile(file, attrs); - } - } - public final AtomicLong count; public final Path runtimeDir; public final Path guardDir; @@ -54,12 +36,15 @@ public JARLauncherBinary(LaunchServer server) throws IOException { buildDir = server.dir.resolve("build"); tasks = new ArrayList<>(); coreLibs = new ArrayList<>(); - Files.createDirectory(buildDir); + if (!Files.isDirectory(buildDir)) { + Files.deleteIfExists(buildDir); + Files.createDirectory(buildDir); + } } @Override public void init() { - tasks.add(new UnpackBuildTask(server)); + tasks.add(new PrepareBuildTask(server)); tasks.add(new MainBuildTask(server)); tasks.add(new ProGuardBuildTask(server)); tasks.add(new AttachJarsTask(server)); @@ -69,9 +54,7 @@ public void init() { @Override public void build() throws IOException { LogHelper.info("Building launcher binary file"); - count.set(0); - coreLibs.clear(); - IOHelper.walk(server.launcherLibraries, new ListFileVisitor(coreLibs), true); + count.set(0); // set jar number Path thisPath = null; boolean isNeedDelete = false; long time_start = System.currentTimeMillis(); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/PrepareBuildTask.java similarity index 54% rename from LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java rename to LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/PrepareBuildTask.java index 59b43d4e..61ec274c 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/UnpackBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/PrepareBuildTask.java @@ -6,13 +6,18 @@ import ru.gravit.utils.helper.UnpackHelper; import java.io.IOException; +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.List; -public class UnpackBuildTask implements LauncherBuildTask { +public class PrepareBuildTask implements LauncherBuildTask { private final LaunchServer server; private final Path result; - public UnpackBuildTask(LaunchServer server) { + public PrepareBuildTask(LaunchServer server) { this.server = server; result = server.launcherBinary.buildDir.resolve(server.config.binaryName + "-clean.jar"); } @@ -24,6 +29,8 @@ public String getName() { @Override public Path process(Path inputFile) throws IOException { + server.launcherBinary.coreLibs.clear(); + IOHelper.walk(server.launcherLibraries, new ListFileVisitor(server.launcherBinary.coreLibs), true); UnpackHelper.unpack(IOHelper.getResourceURL("Launcher.jar"), result); tryUnpack(); return result; @@ -39,4 +46,19 @@ public void tryUnpack() throws IOException { UnpackHelper.unpackZipNoCheck("guard.zip", server.launcherBinary.guardDir); UnpackHelper.unpackZipNoCheck("runtime.zip", server.launcherBinary.runtimeDir); } + + private static final class ListFileVisitor extends SimpleFileVisitor { + private final List lst; + + private ListFileVisitor(List lst) { + this.lst = lst; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (!Files.isDirectory(file) && file.toFile().getName().endsWith(".jar")) + lst.add(file); + return super.visitFile(file, attrs); + } + } } diff --git a/Launcher/build.gradle b/Launcher/build.gradle index b41df9a2..cb0e0c9b 100644 --- a/Launcher/build.gradle +++ b/Launcher/build.gradle @@ -1,19 +1,17 @@ String mainClassName = "ru.gravit.launcher.ClientLauncherWrapper" String mainAgentName = "ru.gravit.launcher.LauncherAgent" - repositories { - maven { - url "http://repo.spring.io/plugins-release/" - } + maven { + url "http://repo.spring.io/plugins-release/" + } } sourceCompatibility = '1.8' targetCompatibility = '1.8' jar { - from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } - manifest.attributes("Main-Class": mainClassName, + manifest.attributes("Main-Class": mainClassName, "Premain-Class": mainAgentName, "Can-Redefine-Classes": "true", "Can-Retransform-Classes": "true", @@ -21,14 +19,20 @@ } dependencies { - compile project(':LauncherAPI') - compile 'com.github.oshi:oshi-core:3.11.0' + compile project(':LauncherAPI') + compile 'com.github.oshi:oshi-core:3.11.0' } task genRuntimeJS(type: Zip) { - archiveName = "runtime.zip" - destinationDir = file("${buildDir}/tmp") - from "runtime/" + archiveName = "runtime.zip" + destinationDir = file("${buildDir}/tmp") + from "runtime/" } -build.dependsOn tasks.genRuntimeJS +task dumpLibs(type: Copy) { + into "$buildDir/libs/libraries" + from configurations.runtime +} + + +build.dependsOn tasks.genRuntimeJS, tasks.dumpLibs diff --git a/LauncherAPI/build.gradle b/LauncherAPI/build.gradle index e7f413a1..102de532 100644 --- a/LauncherAPI/build.gradle +++ b/LauncherAPI/build.gradle @@ -2,8 +2,8 @@ targetCompatibility = '1.8' dependencies { - compile project(':libLauncher') - compile 'javax.websocket:javax.websocket-client-api:1.1' - compileOnly 'com.google.guava:guava:26.0-jre' - compile files('../compat/authlib/authlib-clean.jar') + compile project(':libLauncher') + compile 'javax.websocket:javax.websocket-client-api:1.1' + compileOnly 'com.google.guava:guava:26.0-jre' + compile files('../compat/authlib/authlib-clean.jar') } diff --git a/ServerWrapper/build.gradle b/ServerWrapper/build.gradle index ad5d0e30..d8996fa0 100644 --- a/ServerWrapper/build.gradle +++ b/ServerWrapper/build.gradle @@ -22,5 +22,4 @@ dependencies { compile project(':LauncherAPI') - compile 'org.javassist:javassist:3.23.1-GA' } diff --git a/ServerWrapper/src/main/java/ru/gravit/launcher/server/ServerWrapper.java b/ServerWrapper/src/main/java/ru/gravit/launcher/server/ServerWrapper.java index 8fa85a88..f742962e 100644 --- a/ServerWrapper/src/main/java/ru/gravit/launcher/server/ServerWrapper.java +++ b/ServerWrapper/src/main/java/ru/gravit/launcher/server/ServerWrapper.java @@ -1,6 +1,5 @@ package ru.gravit.launcher.server; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import ru.gravit.launcher.ClientPermissions; diff --git a/build.gradle b/build.gradle index 871960d4..6c9468a2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,18 +1,18 @@ allprojects { apply plugin: 'eclipse' apply plugin: 'idea' - +} + +subprojects { + apply plugin: 'java' + repositories { mavenCentral() maven { url "http://clojars.org/repo/" } } -} -subprojects { - apply plugin: 'java' - configurations { apt aptCompileOnly diff --git a/libLauncher/build.gradle b/libLauncher/build.gradle index 2d77906e..0e527171 100644 --- a/libLauncher/build.gradle +++ b/libLauncher/build.gradle @@ -3,5 +3,5 @@ dependencies { compileOnly 'org.fusesource.jansi:jansi:1.17.1' - compile 'com.google.code.gson:gson:2.8.5' + compile 'com.google.code.gson:gson:2.8.5' } diff --git a/modules b/modules index f87bdf0e..5e37ef4d 160000 --- a/modules +++ b/modules @@ -1 +1 @@ -Subproject commit f87bdf0e1eeed4ca097e4ab90b99b0639aa4b52a +Subproject commit 5e37ef4d9a6d001e70b4ea5c3cd837e30b692d51 From f011b08b12fb81ba5d195ee17134ccc31c70d4d7 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 12:42:20 +0400 Subject: [PATCH 11/16] Libraries dir also for every depend... Next is SignerJar. --- LaunchServer/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index 383605f8..153f9abd 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -35,7 +35,7 @@ } dependencies { - pack project(':libLauncher') // pack + bundle project(':libLauncher') bundle 'org.ow2.asm:asm-commons:7.0' bundle 'org.ow2.asm:asm-util:7.0' bundle 'mysql:mysql-connector-java:8.0.13' From 329f38b1cc9031d60018e39306eb79f134f4e3d5 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 13:08:43 +0400 Subject: [PATCH 12/16] Some fixes. --- .../gravit/launchserver/binary/ProguardConf.java | 3 +++ .../launchserver/binary/tasks/MainBuildTask.java | 15 +++++++++++++++ .../ru/gravit/launchserver/defaults/proguard.cfg | 1 + 3 files changed, 19 insertions(+) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java index 62b11ea6..d4cd0bea 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/ProguardConf.java @@ -48,6 +48,9 @@ public String[] buildConfig(Path inputJar, Path outputJar) confStrs.add("-obfuscationdictionary \'" + words.toFile().getName() + "\'"); confStrs.add("-injar \'" + inputJar.toAbsolutePath() + "\'"); confStrs.add("-outjar \'" + outputJar.toAbsolutePath() + "\'"); + srv.launcherBinary.coreLibs.stream() + .map(e -> "-libraryjars \'" + e.toAbsolutePath().toString() + "\'") + .forEach(confStrs::add); confStrs.add("-classobfuscationdictionary \'" + words.toFile().getName() + "\'"); confStrs.add(readConf()); return confStrs.toArray(new String[0]); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java index 7583ec79..88a5f602 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/MainBuildTask.java @@ -117,6 +117,14 @@ public Path process(Path inputJar) throws IOException { try (ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(outputJar)); JAConfigurator jaConfigurator = new JAConfigurator(AutogenConfig.class.getName(), this)) { jaConfigurator.pool.insertClassPath(inputJar.toFile().getAbsolutePath()); + server.launcherBinary.coreLibs.stream().map(e -> e.toFile().getAbsolutePath()) + .forEach(t -> { + try { + jaConfigurator.pool.appendClassPath(t); + } catch (NotFoundException e2) { + LogHelper.error(e2); + } + }); BuildContext context = new BuildContext(output, jaConfigurator, this); server.buildHookManager.hook(context); jaConfigurator.setAddress(server.config.getAddress()); @@ -129,6 +137,13 @@ public Path process(Path inputJar) throws IOException { jaConfigurator.setEnv(server.config.env); server.buildHookManager.registerAllClientModuleClass(jaConfigurator); reader.getCp().add(new JarFile(inputJar.toFile())); + server.launcherBinary.coreLibs.forEach(e -> { + try { + reader.getCp().add(new JarFile(e.toFile())); + } catch (IOException e1) { + LogHelper.error(e1); + } + }); try (ZipInputStream input = new ZipInputStream(IOHelper.newInput(inputJar))) { ZipEntry e = input.getNextEntry(); while (e != null) { diff --git a/LaunchServer/src/main/resources/ru/gravit/launchserver/defaults/proguard.cfg b/LaunchServer/src/main/resources/ru/gravit/launchserver/defaults/proguard.cfg index c08bbda3..3c081430 100644 --- a/LaunchServer/src/main/resources/ru/gravit/launchserver/defaults/proguard.cfg +++ b/LaunchServer/src/main/resources/ru/gravit/launchserver/defaults/proguard.cfg @@ -1,6 +1,7 @@ -libraryjars '/lib/rt.jar' -libraryjars '/lib/jce.jar' -libraryjars '/lib/ext/nashorn.jar' +-libraryjars '/lib/ext/jfxrt.jar' -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute Source From a032e1546a80012532ebf86b677354605b8349c2 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 13:20:31 +0400 Subject: [PATCH 13/16] Final fixes. --- .../src/main/java/ru/gravit/launchserver/LaunchServer.java | 4 ++-- .../java/ru/gravit/launchserver/binary/JARLauncherBinary.java | 2 +- .../ru/gravit/launchserver/binary/tasks/AttachJarsTask.java | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 2c12a91b..e134fbc3 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -590,8 +590,8 @@ private void generateConfigIfNotExists() throws IOException { newConfig.threadCount = JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() >= 4 ? JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors() / 2 : JVMHelper.OPERATING_SYSTEM_MXBEAN.getAvailableProcessors(); newConfig.enabledProGuard = true; - newConfig.stripLineNumbers = false; - newConfig.deleteTempFiles = false; + newConfig.stripLineNumbers = true; + newConfig.deleteTempFiles = true; // Set server address LogHelper.println("LaunchServer address: "); newConfig.setAddress(commandHandler.readLine()); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java index ba79df3d..6d207969 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/JARLauncherBinary.java @@ -78,7 +78,7 @@ public void build() throws IOException { } public String nextName(String taskName) { - return String.format("Launcher-%s-%d.jar", server.config.projectName, taskName, count.getAndIncrement()); + return String.format("Launcher-%s-%d.jar", taskName, count.getAndIncrement()); } public Path nextPath(String taskName) { diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java index a46871be..6301498f 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/binary/tasks/AttachJarsTask.java @@ -10,6 +10,7 @@ import ru.gravit.launchserver.LaunchServer; import ru.gravit.utils.helper.IOHelper; +import ru.gravit.utils.helper.LogHelper; public class AttachJarsTask implements LauncherBuildTask { private final LaunchServer srv; @@ -51,11 +52,12 @@ public Path process(Path inputFile) throws IOException { private void attach(ZipOutputStream output, List lst) throws IOException { for (Path p : lst) { + LogHelper.debug("Attaching: " + p); try (ZipInputStream input = IOHelper.newZipInput(p)) { ZipEntry e = input.getNextEntry(); while (e != null) { String filename = e.getName(); - if (exclusions.stream().noneMatch(filename::startsWith) && !srv.buildHookManager.isContainsBlacklist(filename)) { + if (exclusions.stream().noneMatch(filename::startsWith) && !srv.buildHookManager.isContainsBlacklist(filename) && !e.isDirectory()) { output.putNextEntry(IOHelper.newZipEntry(e)); IOHelper.transfer(input, output); } From 5b21ad4d7bc8eb9242ad811c9c7b0ed90e28416b Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 13:42:36 +0400 Subject: [PATCH 14/16] Critical bug fix. --- Launcher/build.gradle | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Launcher/build.gradle b/Launcher/build.gradle index cb0e0c9b..79220380 100644 --- a/Launcher/build.gradle +++ b/Launcher/build.gradle @@ -10,7 +10,14 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' +configurations { + bundle + pack + compile.extendsFrom bundle, pack +} + jar { + from { configurations.pack.collect { it.isDirectory() ? it : zipTree(it) } } manifest.attributes("Main-Class": mainClassName, "Premain-Class": mainAgentName, "Can-Redefine-Classes": "true", @@ -19,8 +26,8 @@ } dependencies { - compile project(':LauncherAPI') - compile 'com.github.oshi:oshi-core:3.11.0' + pack project(':LauncherAPI') // Not error on obf. + bundle 'com.github.oshi:oshi-core:3.11.0' } task genRuntimeJS(type: Zip) { @@ -31,7 +38,7 @@ task genRuntimeJS(type: Zip) { task dumpLibs(type: Copy) { into "$buildDir/libs/libraries" - from configurations.runtime + from configurations.bundle } From d3db63aba3f9aef3cd72be04afa696b753d190e1 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 13:53:59 +0400 Subject: [PATCH 15/16] NPE runtime fix. Also allow empty passwords. --- Launcher/runtime/dialog/dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Launcher/runtime/dialog/dialog.js b/Launcher/runtime/dialog/dialog.js index 883792e5..f6c568d4 100644 --- a/Launcher/runtime/dialog/dialog.js +++ b/Launcher/runtime/dialog/dialog.js @@ -149,7 +149,7 @@ function goAuth(event) { var rsaPassword = null; if (!passwordField.isDisable()) { var password = passwordField.getText(); - if (!password.isEmpty()) { + if (password !== null) { rsaPassword = settings.setPassword(password); } else if (settings.rsaPassword !== null) { rsaPassword = settings.rsaPassword; From 96e9cabc6be2d02958878b19698188595fdbd763 Mon Sep 17 00:00:00 2001 From: zaxar163 Date: Wed, 9 Jan 2019 16:10:17 +0400 Subject: [PATCH 16/16] Last fixes. --- Launcher/runtime/dialog/dialog.js | 3 ++- Launcher/src/main/java/ru/gravit/launcher/LauncherEngine.java | 3 ++- .../main/java/ru/gravit/launcher/client/FunctionalBridge.java | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Launcher/runtime/dialog/dialog.js b/Launcher/runtime/dialog/dialog.js index f6c568d4..b193e69f 100644 --- a/Launcher/runtime/dialog/dialog.js +++ b/Launcher/runtime/dialog/dialog.js @@ -149,7 +149,7 @@ function goAuth(event) { var rsaPassword = null; if (!passwordField.isDisable()) { var password = passwordField.getText(); - if (password !== null) { + if (password !== null && !password.isEmpty()) { rsaPassword = settings.setPassword(password); } else if (settings.rsaPassword !== null) { rsaPassword = settings.rsaPassword; @@ -213,6 +213,7 @@ function verifyLauncher(e) { function doAuth(login, rsaPassword) { processing.resetOverlay(); overlay.show(processing.overlay, function (event) { + FunctionalBridge.getHWID.join(); makeAuthRequest(login, rsaPassword, function (result) { loginData = { pp: result.pp , accessToken: result.accessToken, permissions: result.permissions}; diff --git a/Launcher/src/main/java/ru/gravit/launcher/LauncherEngine.java b/Launcher/src/main/java/ru/gravit/launcher/LauncherEngine.java index efa612fd..9061e389 100644 --- a/Launcher/src/main/java/ru/gravit/launcher/LauncherEngine.java +++ b/Launcher/src/main/java/ru/gravit/launcher/LauncherEngine.java @@ -67,7 +67,8 @@ public void start(String... args) throws Throwable { runtimeProvider.preLoad(); FunctionalBridge.worker = new RequestWorker(); CommonHelper.newThread("FX Task Worker", true, FunctionalBridge.worker).start(); - CommonHelper.newThread("GetHWID Thread",true, FunctionalBridge::getHWID).start(); + FunctionalBridge.getHWID = CommonHelper.newThread("GetHWID Thread",true, FunctionalBridge::getHWID); + FunctionalBridge.getHWID.start(); LogHelper.debug("Dir: %s", DirBridge.dir); runtimeProvider.run(args); } diff --git a/Launcher/src/main/java/ru/gravit/launcher/client/FunctionalBridge.java b/Launcher/src/main/java/ru/gravit/launcher/client/FunctionalBridge.java index 6d9cf772..8b94f5fe 100644 --- a/Launcher/src/main/java/ru/gravit/launcher/client/FunctionalBridge.java +++ b/Launcher/src/main/java/ru/gravit/launcher/client/FunctionalBridge.java @@ -29,6 +29,8 @@ public class FunctionalBridge { public static OshiHWIDProvider hwidProvider = new OshiHWIDProvider(); @LauncherAPI public static AtomicReference hwid = new AtomicReference<>(); + @LauncherAPI + public static Thread getHWID = null; @LauncherAPI public static HashedDirRunnable offlineUpdateRequest(String dirName, Path dir, SignedObjectHolder hdir, FileNameMatcher matcher, boolean digest) throws Exception {