Possible Duplicate:
Executing a shell script inside a jar file. How to extract?资源下载JAR
内执行shell脚本捆绑我有“引擎”包内打包到我的JAR文件中的shell脚本。
在我的程序中,我使用Process和ProcessBuilder运行一个shell命令。这一切工作正常。
如果我在我的电脑上指定shell脚本的路径,那么程序工作正常。然而,如果我包的shell脚本到我的JAR和访问它是这样的:
scriptLocation = this.getClass().getResource("/engine/shell-script.sh").toString();
并运行该程序,然后我得到了以下错误:
java.io.IOException: Cannot run program "file:/Users/USERNAME/Desktop/Application-Name.jar!/engine/shell-script.sh": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at engine.Download$1.run(Download.java:39)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:53)
at java.lang.ProcessImpl.start(ProcessImpl.java:91)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 5 more
我开始认为这不可能被做,我非常想提供这个shell脚本作为应用程序的一部分,它可以做到吗?
在此先感谢大家。
======== UPDATE ==========
我终于解决了这个问题。 Shell不能在JAR包中执行脚本,它不是关于Java,而是关于shell。我通过执行以下操作来解决此问题:
Java有一个createTempFile()方法(在应用程序终止后可以选择删除文件),调用此方法并将文件写入要访问的JAR包中到这个临时文件。然后你在本地文件系统上有shell脚本,并且能够执行脚本。
感谢您的回答,我会看到我如何从jar文件中提取shell脚本到临时位置,然后从那里提取它,你知道我怎么能做到这一点或知道任何链接?感谢您的回答! – Cristian
正如我在别处提到的,你可以这样做:unzip -p JARFILE SCRIPTFILE |庆典。这基本上会从jar中提取文件,但实际上并不创建文件。 – Jay