/
JarInJarStarter.java
45 lines (37 loc) · 1.21 KB
/
JarInJarStarter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package net.sf.openrocket.startup.jij;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
public class JarInJarStarter {
/**
* Runs a main class with an alternative classpath.
*
* @param mainClass the class containing the main method to call.
* @param args the arguments to the main method.
* @param providers the classpath sources.
*/
public static void runMain(String mainClass, String[] args, ClasspathProvider... providers) {
List<URL> urls = new ArrayList<URL>();
for (ClasspathProvider p : providers) {
urls.addAll(p.getUrls());
}
if (System.getProperty("openrocket.debug") != null) {
System.out.println("New classpath:");
for (URL u : urls) {
System.out.println(" " + u);
}
}
URL[] urlArray = urls.toArray(new URL[0]);
ClassLoader loader = new URLClassLoader(urlArray, null);
try {
Thread.currentThread().setContextClassLoader(loader);
Class<?> c = Class.forName(mainClass, true, loader);
Method m = c.getMethod("main", args.getClass());
m.invoke(null, (Object) args);
} catch (Exception e) {
throw new RuntimeException("Error starting OpenRocket", e);
}
}
}