mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
[FEATURE] Пересмотр логики AttachJarsTask.
This commit is contained in:
parent
ef89b3ce6e
commit
da615fb11b
3 changed files with 33 additions and 21 deletions
|
@ -11,7 +11,10 @@
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
@ -31,13 +34,33 @@ public String getName() {
|
||||||
@Override
|
@Override
|
||||||
public Path process(Path inputFile) throws IOException {
|
public Path process(Path inputFile) throws IOException {
|
||||||
Path out = server.launcherBinary.nextPath("post-fixed");
|
Path out = server.launcherBinary.nextPath("post-fixed");
|
||||||
try (ClassMetadataReader reader = new ClassMetadataReader()) {
|
try (ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(out))) {
|
||||||
|
apply(inputFile, inputFile, output, server, (e) -> false);
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void apply(Path inputFile, Path addFile, ZipOutputStream output, LaunchServer srv, Predicate<ZipEntry> excluder) throws IOException {
|
||||||
|
try (ClassMetadataReader reader = new ClassMetadataReader()) {
|
||||||
reader.getCp().add(new JarFile(inputFile.toFile()));
|
reader.getCp().add(new JarFile(inputFile.toFile()));
|
||||||
try (ZipInputStream input = IOHelper.newZipInput(inputFile);
|
List<JarFile> libs = srv.launcherBinary.coreLibs.stream().map(e -> {
|
||||||
ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(out))) {
|
try {
|
||||||
|
return new JarFile(e.toFile());
|
||||||
|
} catch (IOException e1) {
|
||||||
|
throw new RuntimeException(e1);
|
||||||
|
}
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
libs.addAll(srv.launcherBinary.addonLibs.stream().map(e -> {
|
||||||
|
try {
|
||||||
|
return new JarFile(e.toFile());
|
||||||
|
} catch (IOException e1) {
|
||||||
|
throw new RuntimeException(e1);
|
||||||
|
}
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
try (ZipInputStream input = IOHelper.newZipInput(addFile)) {
|
||||||
ZipEntry e = input.getNextEntry();
|
ZipEntry e = input.getNextEntry();
|
||||||
while (e != null) {
|
while (e != null) {
|
||||||
if (e.isDirectory()) {
|
if (e.isDirectory() || excluder.test(e)) {
|
||||||
e = input.getNextEntry();
|
e = input.getNextEntry();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -49,14 +72,13 @@ public Path process(Path inputFile) throws IOException {
|
||||||
IOHelper.transfer(input, outputStream);
|
IOHelper.transfer(input, outputStream);
|
||||||
bytes = outputStream.toByteArray();
|
bytes = outputStream.toByteArray();
|
||||||
}
|
}
|
||||||
output.write(classFix(bytes, reader, server.config.stripLineNumbers));
|
output.write(classFix(bytes, reader, srv.config.stripLineNumbers));
|
||||||
} else
|
} else
|
||||||
IOHelper.transfer(input, output);
|
IOHelper.transfer(input, output);
|
||||||
e = input.getNextEntry();
|
e = input.getNextEntry();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] classFix(byte[] bytes, ClassMetadataReader reader, boolean stripNumbers) {
|
private static byte[] classFix(byte[] bytes, ClassMetadataReader reader, boolean stripNumbers) {
|
||||||
|
|
|
@ -44,26 +44,16 @@ public Path process(Path inputFile) throws IOException {
|
||||||
IOHelper.transfer(input, output);
|
IOHelper.transfer(input, output);
|
||||||
e = input.getNextEntry();
|
e = input.getNextEntry();
|
||||||
}
|
}
|
||||||
attach(output, srv.launcherBinary.coreLibs);
|
attach(output, inputFile, srv.launcherBinary.coreLibs);
|
||||||
attach(output, jars);
|
attach(output, inputFile, jars);
|
||||||
}
|
}
|
||||||
return outputFile;
|
return outputFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void attach(ZipOutputStream output, List<Path> lst) throws IOException {
|
private void attach(ZipOutputStream output, Path inputFile, List<Path> lst) throws IOException {
|
||||||
for (Path p : lst) {
|
for (Path p : lst) {
|
||||||
LogHelper.debug("Attaching: " + p);
|
LogHelper.debug("Attaching: " + p);
|
||||||
try (ZipInputStream input = IOHelper.newZipInput(p)) {
|
AdditionalFixesApplyTask.apply(inputFile, p, output, srv, (e) -> exclusions.stream().anyMatch(e.getName()::startsWith));
|
||||||
ZipEntry e = input.getNextEntry();
|
|
||||||
while (e != null) {
|
|
||||||
String filename = e.getName();
|
|
||||||
if (exclusions.stream().noneMatch(filename::startsWith) && !e.isDirectory()) {
|
|
||||||
output.putNextEntry(IOHelper.newZipEntry(e));
|
|
||||||
IOHelper.transfer(input, output);
|
|
||||||
}
|
|
||||||
e = input.getNextEntry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,7 @@ public Path process(Path inputJar) throws IOException {
|
||||||
jaConfigurator.compile();
|
jaConfigurator.compile();
|
||||||
output.write(jaConfigurator.getBytecode());
|
output.write(jaConfigurator.getBytecode());
|
||||||
} catch (CannotCompileException | NotFoundException e) {
|
} catch (CannotCompileException | NotFoundException e) {
|
||||||
LogHelper.error(e);
|
throw new IOException(e);
|
||||||
}
|
}
|
||||||
reader.close();
|
reader.close();
|
||||||
return outputJar;
|
return outputJar;
|
||||||
|
|
Loading…
Reference in a new issue