import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Method;
import java.util.jar.JarFile;
public class AppUpdater {
private String jarPath;
private URLClassLoader classLoader;
public AppUpdater(String jarPath) {
this.jarPath = jarPath;
}
public void loadJar() throws Exception {
File jarFile = new File(jarPath);
URL jarUrl = jarFile.toURI().toURL();
classLoader = new URLClassLoader(new URL[]{jarUrl});
}
public void executeMain(String className, String[] args) throws Exception {
if (classLoader == null) {
throw new IllegalStateException("JAR包未加载");
}
Class<?> mainClass = classLoader.loadClass(className);
Method mainMethod = mainClass.getMethod("main", String[].class);
mainMethod.invoke(null, (Object) args);
}
public void close() {
if (classLoader != null) {
try {
classLoader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("用法: java AppUpdater <JAR路径> <主类名> [程序参数...]");
return;
}
String jarPath = args[0];
String mainClass = args[1];
String[] programArgs = new String[args.length - 2];
System.arraycopy(args, 2, programArgs, 0, programArgs.length);
AppUpdater updater = new AppUpdater(jarPath);
try {
updater.loadJar();
updater.executeMain(mainClass, programArgs);
} catch (Exception e) {
System.err.println("执行失败: " + e.getMessage());
e.printStackTrace();
} finally {
updater.close();
}
}
}