這是我的代碼編譯的一些Java sourcefiles:的javax systemcompiler不產生類文件
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
dependencies = getJarFiles(this.libPath);
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
ArrayList<File> sourceFiles = getSourceFiles(this.apiGeneratedSrcPath);
Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(sourceFiles);
try {
fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(new File(this.genClassDir)));
fileManager.setLocation(StandardLocation.CLASS_PATH, dependencies);
if(!compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call())
throw new IllegalStateException("Error on compiling API");
fileManager.close();
} catch (IOException e) {
e.printStackTrace();
}
,我也試過這個版本:
optionList.addAll(Arrays.asList("-Xmaxerrs", "20"));
optionList.addAll(Arrays.asList("-d", "target\\classes"));
optionList.addAll(Arrays.asList("-cp", classpath));
//Java files
System.out.println("Get source files");
ArrayList<File> sourcefiles = getSourceFiles(this.apiGeneratedSrcPath);
Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(sourcefiles);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, optionList, null, compilationUnits1);
System.out.println("Compile API");
boolean compiled = task.call();
if(!compiled)
throw new IllegalStateException("Error on compiling API");
System.out.println("Compile API Done");
但在我genClassDir(這應該是輸出爲我的類文件)沒有生成類文件,但我沒有得到編譯器錯誤。
我也越來越htis警告我解決不了,但它應該打破構建過程:
Access restriction: The method 'StandardJavaFileManager.setLocation(JavaFileManager.Location, Iterable<? extends File>)' is not API (restriction on required library 'C:\Program Files\Java\jdk1.7.0_80\jre\lib\rt.jar')
編譯器爲什麼不從我的.java源geenerate .class文件的任何想法?
我試過你的第一個版本,它工作正常..它創建類..我嘗試了一個非常簡單的類沒有代碼.. – awsome
好吧,我檢查了所有源文件存在,但仍然沒有生成類文件...我真的無能爲力發生了什麼 – Gobliins