1
0
mirror of https://github.com/lucko/LuckPerms.git synced 2025-09-01 18:32:33 +02:00

Preload dependencies in Docker image

This commit is contained in:
Luck
2022-10-22 00:07:40 +01:00
parent dc22847fa3
commit 5ff9a12a72
6 changed files with 129 additions and 27 deletions

View File

@@ -19,6 +19,9 @@ RUN mv * luckperms-standalone.jar
RUN mkdir data
VOLUME ["/opt/luckperms/data"]
# preload and relocate dependency jars
RUN java -jar luckperms-standalone.jar preloadDependencies
CMD ["java", "-jar", "luckperms-standalone.jar", "--docker"]
HEALTHCHECK --interval=30s --timeout=15s --start-period=20s \

View File

@@ -51,7 +51,8 @@ public class StandaloneLoader implements ShutdownCallback {
public static final Logger LOGGER = LogManager.getLogger(StandaloneLoader.class);
private static final String JAR_NAME = "luckperms-standalone.jarinjar";
private static final String BOOTSTRAP_CLASS = "me.lucko.luckperms.standalone.LPStandaloneBootstrap";
private static final String BOOTSTRAP_PLUGIN_CLASS = "me.lucko.luckperms.standalone.LPStandaloneBootstrap";
private static final String BOOTSTRAP_DEPENDENCY_PRELOADER_CLASS = "me.lucko.luckperms.standalone.StandaloneDependencyPreloader";
private LuckPermsApplication app;
private JarInJarClassLoader loader;
@@ -72,7 +73,19 @@ public class StandaloneLoader implements ShutdownCallback {
// create a jar-in-jar classloader for the standalone plugin, then enable it
// the application is passes to the plugin constructor, to allow it to pass hooks back
this.loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME);
this.plugin = this.loader.instantiatePlugin(BOOTSTRAP_CLASS, LuckPermsApplication.class, this.app);
// special case for dependency preload command
if (args.length == 1 && args[0].equals("preloadDependencies")) {
try {
Class<?> clazz = this.loader.loadClass(BOOTSTRAP_DEPENDENCY_PRELOADER_CLASS);
clazz.getMethod("main").invoke(null);
} catch (Exception e) {
e.printStackTrace();
}
return;
}
this.plugin = this.loader.instantiatePlugin(BOOTSTRAP_PLUGIN_CLASS, LuckPermsApplication.class, this.app);
this.plugin.onLoad();
this.plugin.onEnable();

View File

@@ -0,0 +1,69 @@
/*
* This file is part of LuckPerms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck) <luck@lucko.me>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package me.lucko.luckperms.standalone;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import me.lucko.luckperms.common.dependencies.Dependency;
import me.lucko.luckperms.common.dependencies.DependencyManager;
import me.lucko.luckperms.common.dependencies.relocation.RelocationHandler;
import me.lucko.luckperms.common.util.MoreFiles;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Pre-loads and pre-relocates all possible dependencies.
*/
public class StandaloneDependencyPreloader {
public static void main(String[] args) throws Exception {
main();
}
public static void main() throws Exception {
Path cacheDirectory = Paths.get("data").resolve("libs");
MoreFiles.createDirectoriesIfNotExists(cacheDirectory);
ExecutorService executorService = Executors.newFixedThreadPool(8, new ThreadFactoryBuilder().setDaemon(true).build());
DependencyManager dependencyManager = new DependencyManager(cacheDirectory, executorService);
Set<Dependency> dependencies = new HashSet<>(Arrays.asList(Dependency.values()));
System.out.println("Preloading " + dependencies.size() + " dependencies...");
dependencies.removeAll(RelocationHandler.DEPENDENCIES);
dependencyManager.loadDependencies(RelocationHandler.DEPENDENCIES);
dependencyManager.loadDependencies(dependencies);
System.out.println("Done!");
}
}