Refactored so in the future I can combine everything into one jar

This commit is contained in:
2025-12-04 09:28:21 -05:00
parent 8faa59f161
commit c7734b2294
7 changed files with 23 additions and 10 deletions
+4
View File
@@ -53,6 +53,10 @@
<resource>antivpn-bukkit.jarinjar</resource>
<file>${project.parent.basedir}/Plugin/target/Plugin-${project.version}.jar</file>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>antivpn-source.jarinjar</resource>
<file>${project.parent.parent.basedir}/Common/Source/target/Source-${project.version}.jar</file>
</transformer>
</transformers>
</configuration>
</execution>
@@ -7,12 +7,13 @@ import org.bukkit.plugin.java.JavaPlugin;
public class BukkitLoaderPlugin extends JavaPlugin {
private static final String JAR_NAME = "antivpn-bukkit.jarinjar";
private static final String SOURCE_NAME = "antivpn-source.jarinjar";
private static final String BOOTSTRAP_CLASS = "dev.brighten.antivpn.bukkit.BukkitPlugin";
private final LoaderBootstrap plugin;
public BukkitLoaderPlugin() {
JarInJarClassLoader loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME);
JarInJarClassLoader loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME, SOURCE_NAME);
this.plugin = loader.instantiatePlugin(BOOTSTRAP_CLASS, JavaPlugin.class, this);
}
+1 -1
View File
@@ -83,7 +83,7 @@
<groupId>dev.brighten.antivpn</groupId>
<artifactId>Source</artifactId>
<version>1.9.4</version>
<scope>compile</scope>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bstats</groupId>
@@ -35,14 +35,15 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
/**
* Classloader that can load a jar from within another jar file.
*
* <p>The "loader" jar contains the loading code & public API classes,
* <p>The "loader" jar contains the loading code & public API classes
* and is class-loaded by the platform.</p>
*
* <p>The inner "plugin" jar contains the plugin itself, and is class-loaded
* <p>The inner "plugin" jar contains the plugin itself and is class-loaded
* by the loading code & this classloader.</p>
*/
public class JarInJarClassLoader extends URLClassLoader {
@@ -57,8 +58,10 @@ public class JarInJarClassLoader extends URLClassLoader {
* @param jarResourcePath the path to the jar-in-jar resource within the loader jar
* @throws LoadingException if something unexpectedly bad happens
*/
public JarInJarClassLoader(ClassLoader loaderClassLoader, String jarResourcePath) throws LoadingException {
super(new URL[]{extractJar(loaderClassLoader, jarResourcePath)}, loaderClassLoader);
public JarInJarClassLoader(ClassLoader loaderClassLoader, String... jarResourcePath) throws LoadingException {
super(Arrays.stream(jarResourcePath)
.map(path -> extractJar(loaderClassLoader, path))
.toArray(URL[]::new), loaderClassLoader);
}
public void addJarToClasspath(URL url) {
@@ -127,10 +130,10 @@ public class JarInJarClassLoader extends URLClassLoader {
}
// create a temporary file
// on posix systems by default this is only read/writable by the process owner
// on posix systems; by default, this is only read/writable by the process owner
Path path;
try {
path = Files.createTempFile("luckperms-jarinjar", ".jar.tmp");
path = Files.createTempFile(jarResourcePath, ".jar.tmp");
} catch (IOException e) {
throw new LoadingException("Unable to create a temporary file", e);
}
+4
View File
@@ -81,6 +81,10 @@
<resource>antivpn-velocity.jarinjar</resource>
<file>${project.parent.basedir}/VelocityPlugin/target/VelocityPlugin-${project.version}.jar</file>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>antivpn-source.jarinjar</resource>
<file>${project.parent.parent.basedir}/Common/Source/target/Source-${project.version}.jar</file>
</transformer>
</transformers>
<relocations>
<relocation>
@@ -20,6 +20,7 @@ import java.util.logging.Logger;
public class VelocityPluginLoader {
private static final String JAR_NAME = "antivpn-velocity.jarinjar";
private static final String SOURCE_NAME = "antivpn-source.jarinjar";
private static final String BOOTSTRAP_CLASS = "dev.brighten.antivpn.velocity.VelocityPlugin";
private final LoaderBootstrap plugin;
@@ -32,7 +33,7 @@ public class VelocityPluginLoader {
instances.put(Path.class, path);
instances.put(String.class, metricsFactory);
instances.put(LoaderBootstrap.class, this);
JarInJarClassLoader loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME);
JarInJarClassLoader loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME, SOURCE_NAME);
this.plugin = loader.instantiatePlugin(BOOTSTRAP_CLASS, Map.class, instances);
plugin.onLoad(path.toFile());
}
+1 -1
View File
@@ -36,7 +36,7 @@
<groupId>dev.brighten.antivpn</groupId>
<artifactId>Source</artifactId>
<version>1.9.4</version>
<scope>compile</scope>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bstats</groupId>