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:
@@ -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 \
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user