【问题标题】:javac: file not found in Solarisjavac:在 Solaris 中找不到文件
【发布时间】:2012-06-28 06:23:47
【问题描述】:

我想运行 javac 来编译 Solaris 区域中的多个文件,我可以手动完成,但下面的代码不起作用:

try {
        File directory = new File(dir);
        ProcessBuilder builder = new ProcessBuilder(dirJava, allfiles);
        builder.directory(directory);
        builder.redirectErrorStream(true);
        Process process = builder.start();

        InputStreamReader isr = new  InputStreamReader(process.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String lineRead;
        while ((lineRead = br.readLine()) != null) {
            System.out.println("> "+lineRead);
        }
        process.waitFor();
    }
    catch (IOException e) {
        System.out.println("Could not convert files: "+e.getMessage());
    }

在ProcessBuilder中创建

dirJava = "/usr/jdk/instances/jdk1.6.0/bin/javac"

dir = "/opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/"

allfiles(以下 15 个完整文件路径的串联)=

"/opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringWrapper.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/DistanceInstanceIterator.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringDistance.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringWrapperIterator.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/Tokenizer.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/Jaccard.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/BasicToken.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/BasicStringWrapper.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringDistanceLearner.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/DataTownMain.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/BagOfTokens.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/Token.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/SimpleTokenizer.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/AbstractStringDistance.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/DistanceInstance.java"

javac 的进程错误:找不到文件:/opt/glassfish3/glassfish/domains/...'(错误在这里列出了所有 15 个文件的完整路径)

但是,如果我进入命令提示符中的“dir”目录并键入带有空格的“javac”,则来自文件未找到错误消息(逐字复制)的完整 15 个文件路径该命令有效并生成 .class 文件对于与 .java 文件位于同一目录中的所有这些文件。 (我已检查代码中的 allfiles 和 dir 变量中没有前导或尾随空格)。

我想可能是因为 'dir' 中的最后一个目录是在运行时基于 sessionId 创建的,所以我尝试了 'dir' = "/opt/glassfish3/glassfish/domains/domain1/temp/" (存在在运行时之前),它仍然失败,但如果我手动进入该目录并简单地键入带有完整 15 个文件路径名的 javac,它仍然可以工作。有什么想法吗?

【问题讨论】:

    标签: java solaris javac


    【解决方案1】:

    好的,所以我发现我犯了一个简单的错误 - 而不是将多个文件路径连接到“所有文件”并将其作为单个参数传递,我需要将每个文件路径作为其自己的参数传递给 ProcessBuilder,或者传递所有参数作为一个数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多