您为任务提供的文件管理器负责将摘要映射
JavaFileObject到物理文件,因此它不仅 知道 访问或创建了哪些资源,甚至还 控制了
将要使用的物理资源。当然,也可以仅在处理后定位所创建的资源。这是一个简单的独立示例:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null);Path tmp=Files.createTempDirectory("compile-test-");fileManager.setLocation(StandardLocation.CLASS_OUTPUT,Collections.singleton(tmp.toFile()));Path src=tmp.resolve("A.java");Files.write(src, Arrays.asList( "package test;", "class A {", " class B {", " }", "}"));CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileManager.getJavaFileObjects(src.toFile()));if(task.call()) { for(JavaFileObject jfo: fileManager.list(StandardLocation.CLASS_OUTPUT, "", Collections.singleton(JavaFileObject.Kind.CLASS), true)) { System.out.println(jfo.getName()); }}它将列出生成的
A.class和
A$B.class… 的位置



