0

Я пытаюсь использовать JavaCompiler.run() для выполнения динамически генерируемых исходных файлов. Ниже моя программа, когда я запускаю его я получил на System.err:Файл javac не найден при вызове JavaCompiler.run()

Javac: файл не найден: C: .. bla..bla .. \ тест \ A.java C: .. bla..bla .. \ тест \ B.java C: .. bla..bla .. \ тест \ C.java использование: Javac использование -помощь для списка возможных вариантов

файловсписок не собираются, но Eveything был составлен, когда я положил в командной строке

Javac C: .. bla..bla .. \ тест \ A.java C: .. bla..bla .. \ тест \ B.jav С: .. bla..bla .. \ тест \ A.java

Вот полный исходный код

// define the classes 
String stringA = "package test;" + " " 
    + "public class A { " 
    + "public A() { B b = new B(); b.b(); }" + " " 
    + "public static boolean a() { return true;}" + " " 
    + "}"; 
String stringB = "package test;" + " " 
    + "public class B { " 
    + "public B() { }" + " " 
    + "public boolean b() { return new C().c(); }" + " " 
    + "}"; 
String stringC = "package test;" + " " 
    + "public class C { " 
    + "public C() { }" + " " 
    + "public boolean c() { return A.a(); }" + " " 
    + "}"; 
// Save sources in .java files then compile  
String pathA = store("test/A.java", stringA); 
String pathB = store("test/B.java", stringB); 
String pathC = store("test/C.java", stringC); 

StringBuilder pathBuilder = new StringBuilder(); 
pathBuilder.append(pathA); 
pathBuilder.append(" "); 
pathBuilder.append(pathB); 
pathBuilder.append(" "); 
pathBuilder.append(pathC); 

String files = pathBuilder.toString(); 
// run compiler 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
compiler.run(null, null, null, files); 

... 

Магазин (имя файла, источник) сохраняет исходный файл и вернуть полный путь к сохраненному файлу.

ответ

0

Я нашел решение, я должен вызвать JavaCompiler.run() таким образом:

compiler.run(null, null, null, pathA, pathB, pathC); 

просто предоставить каждый путь к исходному файлу в качестве отдельного аргумента вместо concatinating различных путей и обеспечения run() один аргумент! Я заметил, что не все параметры javac поддерживаются (например, classpath) компилятором, предоставленным через ToolProvider.getSystemJavaCompiler().