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. java - Ckeditor上传图片时出现mutipartRequest 转换异常2. docker images显示的镜像过多,狗眼被亮瞎了,怎么办?3. javascript - 怎样去除数组里的几个值,只提供该数组的下标的话4. python - Django ManyToManyField 字段数据在 admin后台 显示不正确,这是怎么回事?5. 老师无限级分类有点难哟 不好理解6. php由5.3升级到5.6后,登录网站,返回的是php代码,不是登录界面,各位大神有知道的吗?7. javascript - vue-cli热更新的问题【webpack配置】8. mysql 能不能创建一个 有列级函数 的联合视图?9. javascript - swiper.js嵌套了swiper 初始设置不能向下一个滑动 结束后重新初始10. node.js - webpack required打包问题

网公网安备