使用类加载器在java程序中运行可执行jar文件

Joh*_*ohn 2 java jar executable-jar classloader

我听说你可以使用Process或使用ClassLoaders运行其他java文件.

我有一个可执行jar'test.jar',主叫类叫Test.

我找到了一种使用Process运行的方法.我需要知道如何使用ClassLoaders.

Process p = Runtime.getRuntime().exec("java -jar test.jar");
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
synchronized (p) {
   p.waitFor();
}
int b=0;
while((b=bis.read()) >0){
   System.out.print((char)b);    
}
Run Code Online (Sandbox Code Playgroud)

Fla*_*vio 5

一些代码可以帮助您入门,这基本上就是@Felipe所说的.

请记住,这不是完全相同的事情.你不会产生一个新的进程,只是一个新的线程; 你可能会面临巨大的课堂负担; 之类的东西System.exit()里面的Test.jar文件也将导致容器程序终止,等等.

File f = new File("Test.jar");
ClassLoader cl = new URLClassLoader(new URL[] { f.toURI().toURL() }, null);
final Class<?> claxx = cl.loadClass("my.package.Test");
final Method main = claxx.getMethod("main", String[].class);

Thread th = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            main.invoke(claxx, new Object[] { new String[] { "Param1", "Param2" } });
        } catch (Throwable th) {
            // TODO
        }
    }
});

th.setContextClassLoader(cl);
th.start();

th.join();
Run Code Online (Sandbox Code Playgroud)