使用ProcessBuilder在Jar中运行可执行文件

我有一个我构建的应用程序,它使用通过ProcessBuilder调用的非Java可执行文件:

ProcessBuilder pb = new ProcessBuilder(invocation);
pb.redirectErrorStream(true);
Process proc = pb.start();
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

但是,我想将该应用程序整齐地捆绑到jar文件本身,而不是要求将它放在同一目录之外。 有没有办法运行这个应用程序而不提取它?

如果我需要删除ProcessBuilder,那就没关系,只要它有效。 🙂

你基本上要求操作系统在ZIP文件中运行一个应用程序。 如果不首先提取它,我不知道有任何方法可以做到这一点。 即使它是Java应用程序,您也需要调用java可执行文件,因为它知道如何解析JAR文件并访问其中的类和资源。

我能想到的唯一相当简单的解决方法是将JAR的内容提取到临时文件夹并从那里运行程序。 这可以使用java.util.zip中的类以编程方式完成。

您可以将可执行文件和JAR捆绑到另一个zip中。 这样,当用户提取它时,一切都在您期望的位置。