Проблема с путем в .jar файле - PullRequest
3 голосов
/ 13 ноября 2010

Я хочу вызвать компилятор (нестандартный), расположенный в папке внутри моего Java-приложения. Поэтому я написал этот код:

Process p = Runtime.getRuntime().exec("closures/bin/javac " + filename);

Это сработало! Но теперь я хочу упаковать этот компилятор вместе с моими файлами .class в файл .jar. Моя структура папок выглядит примерно так:

  • .class (много классов)

  • замыкания / (папка)

Но когда указанная выше строка из файла jar (вызов компилятора в подпапке) выполняется, я получаю следующее:

Exception in thread "main" java.io.IOException: Cannot run program "closures/bin/javac": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
at java.lang.Runtime.exec(Runtime.java:610)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
at Main.main(Main.java:44)

Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
... 4 more

Мне кажется, это проблема пути.

Что я делаю не так?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2010

Вы не можете выполнить исполняемый файл в файле jar.Вы должны извлечь его до вызова Runtime.getRuntime().exec().

Подумайте еще раз, Runtime.getRuntime().exec() использует функцию вашей ОС.Ваша ОС не знает о файле .jar.Вы должны извлечь его.

0 голосов
/ 13 ноября 2010

Только из вашего расплывчатого описания, почему вы думаете, что pwd вашего приложения - это та же папка, в которой находятся замыкания? Мне кажется, что вы запускаете его из .class, так что вы, вероятно, захотите по крайней мере

Process p = Runtime.getRuntime().exec("../closures/bin/javac " + filename);

но это еще не самый надежный способ назвать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...