我不知道如何设置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();
但我收到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: src/Hello.java
当然,如果我把 null 而不是类,我会得到“没有源文件”,因为没有给出源文件。在此之前我尝试使用 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();
最佳答案
下面的代码应该可以解决问题,尽管我在机器上运行代码时将路径设置为绝对路径:
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();
关于java - 如何通过 CompilationTask 设置编译源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873576/