2012-06-28 2 views
0

Я хочу запустить JAVAC скомпилировать muiltiple файлы в зоне Solaris, и я могу сделать это вручную, но мой код ниже не работает: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/домены/домен1/TEMP/1b504235dc6be0558532a7b7bf27 /"

allfiles (переменный ток oncatenation 15 полных путей к файлам ниже) =

«/opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringWrapper.java /Opt/glassfish3/GlassFish/домены/domain1/TEMP/1b504235dc6be0558532a7b7bf27/методы/String_Distance/и/DistanceInstanceIterator.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/StringDistance.java /опт/glassfish3/GlassFish/домены/домен1/температуры/1b504235dc6be0558532a7b7bf27/методы/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/методы/String_Distance/и/Token.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/SimpleTokenizer.java /опт/glassfish3/GlassFish/домены/domain1/температуры/1b504235dc6be0558532a7b7bf27/методы/String_Distance/и/AbstractStringDistance.java /opt/glassfish3/glassfish/domains/domain1/temp/1b504235dc6be0558532a7b7bf27/methods/String_Distance/u/DistanceInstance.java»

ошибки процесса с JAVAC: файл не найден :/opt/glassfish3/glassfish/domains/... '(ошибка перечисляет полные пути для всех 15 файлов)

Но если я перейду в каталог' dir 'в команде prompt и введите «javac» с пробелом, а затем все 15 путей файла из файла, не найденного сообщения об ошибке (скопированное дословно), команда работает и генерирует файлы .class для всех этих файлов в том же каталоге, что и файлы .java. (Я проверил, что в файлах allfiles и dir в моем коде нет начальных или конечных пробелов).

Я подумал, что это потому, что последний каталог в каталоге 'dir' создается во время выполнения на основе sessionId, поэтому я попробовал 'dir' = "/ opt/glassfish3/glassfish/domains/domain1/temp /" (который существует до выполнения), и он все равно терпит неудачу, но опять же, если я вручную перейду в этот каталог и просто наберите javac с полными 15 файловыми именами, он работает. Есть идеи?

ответ

0

Итак, я понял, какую ошибку я делал - вместо того, чтобы объединять несколько путей файла в «allfiles» и передавать это как один аргумент, мне нужно передать каждый путь файла как свой собственный аргумент ProcessBuilder или передать все аргументы в виде массива.

Смежные вопросы