Java - process launched with Runtime.getRuntime().exec( cannot create temp file

社会主义新天地 提交于 2019-12-20 04:16:22

问题


process launched with Runtime.getRuntime().exec(cmdLine, envp, workingDirectory); cannot create temp file.

It is used inside Maven plugin for Eclipse

Quote from mvn launched:

 Caused by: java.io.IOException: �ܾ���ʡ�
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createTempFile(File.java:1879)

Full log

This is not Maven related as Gradle has the same issue

Demo piece of code runs into the same error.

        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:

Passing TMP and TEMP environment variables does not help.
Passing null instead of envp also does not help.

If envp is null, the subprocess inherits the environment settings of the current process.


回答1:


Solved by passing a set of environment variables.



来源:https://stackoverflow.com/questions/21397170/java-process-launched-with-runtime-getruntime-exec-cannot-create-temp-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!