Possible Duplicate:
Executing a shell script inside a jar file. How to extract?Java Script Shell Execute spakowany w JAR
Mam skrypt pakowane w moim pliku JAR w ramach pakietu 'silnik'.
W moim programie używam polecenia powłoki, używając Process i ProcessBuilder. Wszystko działa dobrze.
Jeśli określę ścieżkę do skryptu powłoki na moim komputerze, program działa poprawnie. Jeśli jednak mam zapakować skrypt do mojego JAR, a dostęp do niego tak:
scriptLocation = this.getClass().getResource("/engine/shell-script.sh").toString();
i uruchomić program, a następnie pojawia się 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 to nie może zrobić, bardzo chciałbym dostarczyć ten skrypt powłoki jako część aplikacji, czy można to zrobić?
Z góry dziękuję wszystkim.
======== UPDATE ==========
I w końcu rozwiązać 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łaj to i zapisz plik 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 jesteś w stanie wykonać skrypt.
Dziękuję za odpowiedź, zobaczę, jak mogę wyodrębnić skrypt powłoki z pliku jar do tymczasowej lokalizacji, a następnie wydobyć ją stamtąd, czy wiesz, jak mogę zrobić to lub znać jakieś linki? Dzięki za odpowiedź! – Cristian
Jak już wspomniałem w innym miejscu, możesz to zrobić: rozpakować -p JARFILE SCRIPTFILE | grzmotnąć. To zasadniczo rozpakuje plik ze słoika, ale w rzeczywistości nie tworzy pliku. – Jay