1

我不知道如何设置源文件compilationTask

我试过这个:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

List<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes"));

List<String> classes = new ArrayList<String>();
classes.add("src/Hello.java");
CompilationTask task = compiler.getTask(null, null, null, optionList, classes, null);

task.call();

但我收到以下错误:

线程“主”java.lang.IllegalArgumentException 中的异常:不是有效的类名:src/Hello.java

当然,如果我放空而不是类,我会得到“没有源文件”,因为没有给出源文件。我尝试使用JavaCompiler之前的 run 函数,但我无法在字符串参数中指定选项(或者我不知道如何)。

这是解决方案:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        List<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes"));

 Iterable<? extends JavaFileObject> classes = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(new File("src/Hello.java")));


CompilationTask task = compiler.getTask(null, null, null, optionList,null, classes);

task.call();
4

2 回答 2

0

尝试改变:

classes.add("src/Hello.java");

至:

classes.add(
  new SimpleJavaFileObject(new URI("src/Hello.java"), JavaFileObject.Kind.SOURCE)
);

这有点冗长,但可以完成工作。当然它可以被提取到一个方法中。

于 2011-05-12T11:49:57.523 回答
0

以下代码应该可以解决问题,尽管我在机器上运行代码时将路径设为绝对路径:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null);

ArrayList<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes"));

ArrayList<File> files = new ArrayList<File>();
files.add(new File("src/Hello.java"));
CompilationTask task = compiler.getTask(null, null, null, optionList, null, fm.getJavaFileObjectsFromFiles(files));

task.call();
于 2011-05-03T17:59:25.783 回答