запущен с Runtime.getRuntime().exec(cmdLine, envp, workingDirectory);
не может создать временный файлJava - процесс, начатый с Runtime.getRuntime() Exec (не может создать временный файл процесс
Он используется внутри Цитата Maven plugin for Eclipse
из mvn
запущенных:
Caused by: java.io.IOException: �ܾ���ʡ�
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:1879)
Это не Maven, связанные, как Gradle has the same issue
Demo piece of code работает с той же ошибкой.
String mavenPath = "D:\\Progs\\springsource\\apache-maven-3.0.4\\bin\\mvn.bat";
String mavenOptions = "-X compile exec:java -Dexec.mainClass=runclass.Runme";
String[] cmdLine = new String[2];
cmdLine[0] = mavenPath; //cmdLine.add(mavenPath);
cmdLine[1] = mavenOptions; //cmdLine.add(mavenOptions+" compile exec:java -Dexec.mainClass="+packageClass);
String[] envp = new String[2];
//Map<String, String> envm = new HashMap<String, String>();
envp[0] = "JAVA_HOME=" + System.getProperty("java.home"); //System.getenv("JAVA_HOME");
envp[1] = "M2_HOME=" + System.getenv("MAVEN_HOME");
File workingDirectory = null;
String currentDir = new File(".").getAbsolutePath();
log(currentDir);
String userDir = System.getProperty("user.dir"); //User working directory ; "user.home" User home directory
workingDirectory = new File(userDir);
log(workingDirectory.toString());
//
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmdLine, envp, workingDirectory);
InputStream stdout = proc.getInputStream();
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stdout);
InputStreamReader isr2 = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
BufferedReader br2 = new BufferedReader(isr2);
Update:
Передача TMP и TEMP переменные окружения не поможет.
Передача null
вместо envp
также не помогает.
Если envp равно null, подпроцесс наследует настройки среды текущего процесса.
Остерегайтесь того, что каждый элемент в 'cmdLine' должен быть отдельным аргументом, переданным первому элементу в' cmdLine' (т.е. 'cmdline [0]' - это команда для выполнения, все остальные элементы являются отдельными аргументами). Прямо сейчас, вы 'bat' -файл получает один аргумент, который я сомневаюсь в том, что вы хотите;) – MadProgrammer
Я прекрасно это понимаю. Это делается специально, в противном случае существует некоторая недокументированная обработка строки «a = b» (просто становится «b»). См. Http://stackoverflow.com/questions/21358548/java-runtime-getruntime-exec-looses-changes-some-parameters –