Java-使用Runtime.getRuntime()。exec(無法啟動臨時文件啟動的進程
通過傳遞一組環境變量來解決。
解決方法啟動的進程Runtime.getRuntime().exec(cmdLine,envp,workingDirectory);無法創建臨時文件。
在Eclipse的Maven插件中使用
從mvn啟動報價:
Caused by: java.io.IOException: ??????? at java.io.WinNTFileSystem.createFileExclusively(Native Method) at java.io.File.createTempFile(File.java:1879)
完整日志
演示代碼段遇到相同的錯誤。
String mavenPath = 'D:Progsspringsourceapache-maven-3.0.4binmvn.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 directoryworkingDirectory = new File(userDir); log(workingDirectory.toString());//Runtime rt = Runtime.getRuntime();Process proc = rt.exec(cmdLine,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);
更新:
傳遞TMP和TEMP環境變量無濟于事。通過 null而不是envp也無濟于事。
如果envp為null,則子進程繼承當前進程的環境設置。
相關文章:
1. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?2. 關docker hub上有些鏡像的tag被標記““This image has vulnerabilities””3. docker-machine添加一個已有的docker主機問題4. css - 求推薦適用于vue2的框架 像bootstrap這種類型的5. Span標簽6. SessionNotFoundException:會話ID為null。調用quit()后使用WebDriver嗎?(硒)7. android新手一枚,android使用httclient獲取服務器端數據失敗,但是用java工程運行就可以成功獲取。8. css - 關于div自適應問題,大家看圖吧,說不清9. redis啟動有問題?10. java - Collections類里的swap函數,源碼為什么要新定義一個final的List型變量l指向傳入的list?
