我有一个我构建的应用程序,它使用通过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,那就没关系了,只要它有效。 :)
答案 0 :(得分:5)
您基本上要求操作系统在ZIP文件中运行应用程序。如果不首先提取它,我不知道有任何方法可以做到这一点。即使它是Java应用程序,您也需要调用 java 可执行文件,因为它知道如何解析JAR文件并访问其中的类和资源。
我能想到的唯一相当简单的解决方法是将JAR的内容提取到临时文件夹并从那里运行程序。这可以使用 java.util.zip 中的类以编程方式完成。
答案 1 :(得分:1)
您可以将可执行文件和JAR捆绑到另一个zip中。这样,当用户提取它时,一切都在您期望的位置。