Отсутствие такого исключения файла или каталога в Ubuntu при попытке скомпилировать проект java из java .lang.Process - PullRequest
1 голос
/ 11 июля 2020

Недавно я перешел на Ubuntu v20.04 с Windows 10 Pro v2004 из соображений производительности. Когда я был на Windows, я мог свободно скомпилировать проект java из другой java программы , написав:

String pathToCompiler = "\"C:/Program Files/Java/jdk-14/bin/javac\"";
Process compileProcess = Runtime.getRuntime().exec(pathToCompiler+" -d bin @.sources", null, new File("ProjectPath"))

Где исходный файл - это файл, содержащий список классов проекта

Приведенный выше код успешно работает на Windows 10.

  • Но на Linux (Ubuntu): если я подставляю значение переменной pathToCompiler как pathToCompiler = "\"/usr/lib/jvm/java-11-openjdk-amd64/bin/javac\"" возникает исключение ниже, и программа, выполняющая команду, завершает работу:
"/usr/lib/jvm/java-11-openjdk-amd64/bin/javac" -d bin  @.sources 
java.io.IOException: Cannot run program ""/usr/lib/jvm/java-11-openjdk-amd64/bin/javac"" (in directory "/home/arham/Documents/Omega Projects/Project0"): error=2, No such file or directory
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at java.base/java.lang.Runtime.exec(Runtime.java:592)
    at java.base/java.lang.Runtime.exec(Runtime.java:416)
    at ide.utils.systems.BuildView.lambda$3(BuildView.java:267)
    at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: java.io.IOException: error=2, No such file or directory
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)

The problem is that the file actually exists but it says No Such File or Directory Фактически, программа, которая компилирует проект, является Java IDE, которая Я создаю. Подскажите, пожалуйста, знает ли он, как исправить эту ошибку

У меня есть скриншот ошибки :(

Ответы [ 2 ]

4 голосов
/ 11 июля 2020

Метод Runtime.exec имеет несколько проблем , которые затрудняют использование, и это одна из них. Вместо этого используйте более новый ProcessBuilder класс .

String pathToCompiler = "C:/Program Files/Java/jdk-14/bin/javac";
Process compileProcess = new ProcessBuilder(pathToCompiler, "-d", "bin", "@.sources")
    .directory(new File("ProjectPath"))
    .start();

Отличия:

  • Удалите лишние кавычки вокруг пути к исполняемому файлу. Если требуется цитирование, система позаботится об этом.
  • Передайте аргументы каждой командной строки в виде отдельной строки. Таким образом, вам не нужно беспокоиться о цитировании.
2 голосов
/ 11 июля 2020

Обновите путь до следующего:

String pathToCompiler = "/usr/lib/jvm/java-11-openjdk-amd64/bin/javac/";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...