Skip to content

Commit

Permalink
Switch to static dependency list file instead of accessing the jar as…
Browse files Browse the repository at this point in the history
… a file system
  • Loading branch information
AlexProgrammerDE committed Oct 25, 2024
1 parent 9e075de commit cd65017
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 107 deletions.
15 changes: 15 additions & 0 deletions client/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,18 @@ fun Manifest.applySFAttributes() {
}

tasks {
val generateDependencyList = register("generateDependencyList") {
val outputFile = layout.buildDirectory.file("dependency-list.txt")
outputs.file(outputFile)

doLast {
val dependencies = configurations.runtimeClasspath.get().files
.filter { it.name.endsWith("jar") }
.filter { !it.toString().contains("build/libs") }
.joinToString("\n") { it.name }
outputFile.get().asFile.writeText(dependencies)
}
}
jar {
archiveClassifier = "unshaded"

Expand Down Expand Up @@ -129,6 +141,9 @@ tasks {
}) {
into("META-INF/lib")
}
from(generateDependencyList.get().outputs.files) {
into("META-INF")
}
}
build {
dependsOn(uberJar)
Expand Down
15 changes: 15 additions & 0 deletions dedicated/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,18 @@ fun Manifest.applySFAttributes() {
}

tasks {
val generateDependencyList = register("generateDependencyList") {
val outputFile = layout.buildDirectory.file("dependency-list.txt")
outputs.file(outputFile)

doLast {
val dependencies = configurations.runtimeClasspath.get().files
.filter { it.name.endsWith("jar") }
.filter { !it.toString().contains("build/libs") }
.joinToString("\n") { it.name }
outputFile.get().asFile.writeText(dependencies)
}
}
jar {
archiveClassifier = "unshaded"

Expand Down Expand Up @@ -100,6 +112,9 @@ tasks {
}) {
into("META-INF/lib")
}
from(generateDependencyList.get().outputs.files) {
into("META-INF")
}
}
build {
dependsOn(uberJar)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,18 @@
*/
package com.soulfiremc.server.util.structs;

import com.soulfiremc.server.util.FileSystemUtil;
import lombok.Getter;

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class SFContextClassLoader extends ClassLoader {
@Getter
Expand All @@ -48,20 +48,29 @@ public SFContextClassLoader(Path libDir) {
}
}

private static URLClassLoader createLibClassLoader(Path libDir) {
private static ClassLoader createLibClassLoader(Path libDir) {
var urls = new ArrayList<URL>();
try {
Files.createDirectories(libDir);
for (var entry : FileSystemUtil.getFilesInDirectory("/META-INF/lib").entrySet()) {
var fileName = entry.getKey().getFileName().toString();

var libFile = libDir.resolve(fileName);
Files.write(libFile, entry.getValue());
urls.add(libFile.toUri().toURL());
var dependencyListInput = ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/dependency-list.txt");
if (dependencyListInput != null) {
try {
Files.createDirectories(libDir);
for (var fileName : new String(dependencyListInput.readAllBytes(), StandardCharsets.UTF_8).split("\n")) {
var libFile = libDir.resolve(fileName);
try (var libInput = Objects.requireNonNull(
ClassLoader.getSystemClassLoader().getResourceAsStream(
"META-INF/lib/" + fileName
),
"File not found: " + fileName
)) {
Files.write(libFile, libInput.readAllBytes());
urls.add(libFile.toUri().toURL());
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
} catch (IOException | URISyntaxException e) {
throw new RuntimeException(e);
}

return new URLClassLoader(urls.toArray(new URL[0]), ClassLoader.getSystemClassLoader());
}

Expand Down

0 comments on commit cd65017

Please sign in to comment.