我需要开发一个"发射器"对于Java应用程序。该发射器需要能够:
这样的事情:
public final class Launcher {
public static void main(String[] args) throws Exception {
String jarName = args[0];
if (jarHasUpdate(jarName)
refreshJar(jarName);
executeJar(jarName);
}
}
有什么更好的方法来开发第3步?
我尝试了两种截然不同的方式:
1-运行另一个Java实例
使用代码:
Runtime.getRuntime().exec("java -jar mainApp.jar");
问题:启动程序仍在运行,直到mainApp完成。
2-使用ClassLoader在运行时加载.jar
像这样:
public final class Launcher {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out.println("Invalid number of arguments.");
System.exit(1);
}
Refresh.refreshFile(args[0]);
// args[0] .jar name
// args[1] class with main function
File file = new File(args[0]);
try (URLClassLoader cl = new URLClassLoader(new URL[] { file.toURI().toURL() });) {
Class cls = cl.loadClass(args[1]);
Method method = cls.getDeclaredMethod("main", new Class[] { String[].class });
Object params = new String[] {};
method.invoke(cls, params);
}
}
}
问题:如果&#34; mainApp.jar&#34;有依赖关系,这是没有加载的。