Change layout of library storage

This commit is contained in:
Luck 2020-02-09 15:24:04 +00:00
parent 446fa48d9a
commit 4cfee76202
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
3 changed files with 45 additions and 17 deletions

View File

@ -343,6 +343,10 @@ public enum Dependency {
}
*/
public String getFileName() {
return name().toLowerCase().replace('_', '-') + "-" + this.version;
}
public List<URL> getUrls() {
return this.urls;
}

View File

@ -61,6 +61,8 @@ public class DependencyManager {
private final LuckPermsPlugin plugin;
private final MessageDigest digest;
private final DependencyRegistry registry;
private final Path libsDirectory;
private final EnumMap<Dependency, Path> loaded = new EnumMap<>(Dependency.class);
private final Map<ImmutableSet<Dependency>, IsolatedClassLoader> loaders = new HashMap<>();
private RelocationHandler relocationHandler = null;
@ -73,6 +75,22 @@ public class DependencyManager {
throw new RuntimeException(e);
}
this.registry = new DependencyRegistry(plugin);
this.libsDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("libs");
try {
MoreFiles.createDirectoriesIfNotExists(this.libsDirectory);
} catch (IOException e) {
throw new RuntimeException("Unable to create libs directory", e);
}
Path oldLibsDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("lib");
if (Files.exists(oldLibsDirectory)) {
try {
MoreFiles.deleteDirectory(oldLibsDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private synchronized RelocationHandler getRelocationHandler() {
@ -82,16 +100,6 @@ public class DependencyManager {
return this.relocationHandler;
}
private Path getSaveDirectory() {
Path saveDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("lib");
try {
MoreFiles.createDirectoriesIfNotExists(saveDirectory);
} catch (IOException e) {
throw new RuntimeException("Unable to create lib directory", e);
}
return saveDirectory;
}
public IsolatedClassLoader obtainClassLoaderWith(Set<Dependency> dependencies) {
ImmutableSet<Dependency> set = ImmutableSet.copyOf(dependencies);
@ -129,8 +137,6 @@ public class DependencyManager {
}
public void loadDependencies(Set<Dependency> dependencies) {
Path saveDirectory = getSaveDirectory();
// create a list of file sources
List<Source> sources = new ArrayList<>();
@ -141,7 +147,7 @@ public class DependencyManager {
}
try {
Path file = downloadDependency(saveDirectory, dependency);
Path file = downloadDependency(dependency);
sources.add(new Source(dependency, file));
} catch (Throwable e) {
this.plugin.getLogger().severe("Exception whilst downloading dependency " + dependency.name());
@ -163,7 +169,7 @@ public class DependencyManager {
}
Path input = source.file;
Path output = input.getParent().resolve("remapped-" + input.getFileName().toString());
Path output = this.libsDirectory.resolve(source.dependency.getFileName() + "-remapped.jar");
// if the remapped file exists already, just use that.
if (Files.exists(output)) {
@ -201,9 +207,8 @@ public class DependencyManager {
}
}
private Path downloadDependency(Path saveDirectory, Dependency dependency) throws Exception {
String fileName = dependency.name().toLowerCase() + "-" + dependency.getVersion() + ".jar";
Path file = saveDirectory.resolve(fileName);
private Path downloadDependency(Dependency dependency) throws Exception {
Path file = this.libsDirectory.resolve(dependency.getFileName() + ".jar");
// if the file already exists, don't attempt to re-download it.
if (Files.exists(file)) {

View File

@ -26,6 +26,7 @@
package me.lucko.luckperms.common.util;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
@ -57,4 +58,22 @@ public final class MoreFiles {
return path;
}
public static void deleteDirectory(Path path) throws IOException {
if (!Files.exists(path) || !Files.isDirectory(path)) {
return;
}
try (DirectoryStream<Path> contents = Files.newDirectoryStream(path)) {
for (Path file : contents) {
if (Files.isDirectory(file)) {
deleteDirectory(file);
} else {
Files.delete(file);
}
}
}
Files.delete(path);
}
}