Skrypt Java Execute Shell w pakiecie JAR [duplikat]

Możliwy duplikat:
Wykonywanie skryptu powłoki w pliku jar. Jak wyodrębnić?

Mam skrypt powłoki spakowany do mojego pliku JAR w pakiecie „engine”.

W moim programie używam polecenia powłoki z Process i ProcessBuilder. To wszystko działa dobrze.

Jeśli podam ścieżkę do skryptu powłoki na moim komputerze, program działa poprawnie. Jeśli jednak spakuję skrypt powłoki do mojego pliku JAR i uzyskuję do niego dostęp w ten sposób:

scriptLocation = this.getClass().getResource("/engine/shell-script.sh").toString();

I uruchom program, a następnie otrzymuję następujący błąd:

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

Zaczynam myśleć, że nie można tego zrobić, bardzo chciałbym dostarczyć ten skrypt powłoki jako część aplikacji, czy można to zrobić?

Z góry dzięki wszystkim.

======== UPDATE ==========

W końcu rozwiązałem ten problem. Shell nie może wykonywać skryptów w pakiecie JAR, nie chodzi o Javę, ale o powłokę. Naprawiłem to, wykonując następujące czynności:

Java ma metodę createTempFile () (z opcją usunięcia pliku po zakończeniu aplikacji), wywołania tego i zapisania pliku w pakiecie JAR, do którego chcesz uzyskać dostęp do tego pliku tymczasowego. Następnie masz skrypt powłoki w lokalnym systemie plików i możesz wykonać skrypt.

questionAnswers(3)

yourAnswerToTheQuestion