调用编译器编译覆盖
你可以完事了,因为这样使用标准编译器已经足够了,可是这还有更有用的. 当你需要更好的处理这些结果时,你可以使用第二种方法来访问编译器. 更特别的是,这第二种方式允许开发者将编译输出结果用一种更有意义的方式表现出来,而不是简单的那种送往stdeer的错误文本. 利用 StandardJavaFileManager 类我们有这种更好的途径使用编译器. 这个文件管理器提供了一种方式,用来处理普通文件的输入输出操作. 它同时利用 DiagnosticListener 实例来报告调试信息. 你需要使用的 DiagnosticCollector 类其实是监听器的一种实现. 在搞清楚你需要编译什么之前,你需要一个文件管理器. 生成一个管理器基本上需要两步: 创建一个 DiagnosticCollector 和 使用 JavaCompiler 的 getStandardFileManager() 方法获得一个文件管理器. 把 DiagnosticListener 对象传入 getStandardFileManager() 方法中. 这个监听器可以报告一些非致命的问题,到后来你可以选择性的通过把它传入 getTask() 方法来和编译器共享.
DiagnosticCollector diagnostics =
new DiagnosticCollector();
StandardJavaFileManager fileManager =
tStandardFileManager(diagnostics, aLocale, aCharset);
你也可以往这个调用里传入一个 null 值的诊断器,但这样也就等于用以前的编译器方法了.
在详细查看 StandardJavaFileManager 之前 ,编译过程涉及到 JavaCompiler 的一个方法叫做 getTask(). 它有六个参数,返回一个叫做 CompilationTask 内部类的实例:
pilationTask getTask(
Writer out,
JavaFileManager fileManager,
DiagnosticListener? super JavaFileObject diagnosticListener,
Iterable options,
Iterable classes,
Iterable? extends JavaFileObject compilationUnits)
缺省情况下,大部分它的参数可以是 null.
* out: r
* fileManager: compiler\'s standard file manager
* diagnosticListener: compiler\'s default behavior
* options: no command-line options to compiler
* classes: no class names for annotation processing
最后一个参数 compilationUnits 却是不能够为null ,因为它是你要去编译的东西. 它把我们又带回了 StandardJavaFileManager类.注意这个参数类型: Iterable? extends JavaFileObject. StandardJavaFileManager 有两个方法返回这样的结果. 你可以使用一个文件对象的List或者 String 对象的List,用它们来表示文件名:
Iterable? extends JavaFileObject getJavaFileObjectsFromFiles(
Iterable? extends File files)
Iterable? extends JavaFileObject getJavaFileObjectsFromStrings(
更让全世界数千万粉丝迫切期待。【游续作 延续经典】 对于游续作来说 Iterable names)
并不仅仅 List,实际上,任何一个能够标识需要编译的内容的集合的 Iterable 都可以. List 出现在这里只是因为它容易生成:
String[] filenames = ...;
Iterable? extends JavaFileObject compilationUnits =
tJavaFileObjectsFromFiles(List(filenames));
现在你有了编译源文件的所有的必要的信息. 从 getTask() 返回的 pilationTask 实现了 Callable.接口 这样,想让任务开始就去调用call()方法.
pilationTask task =
tTask(null, fileManager, null, null, null, compilationUnits);
Boolean success = ll();
查看本文来源
如何调理儿童脾胃虚弱银川卵巢炎
合肥治疗白癜风医院哪家好
- 06月21日军事大丹犬哪些行为应该及时纠正位置
- 06月21日军事外出期间柴犬不听话总是乱跑怎么办位置
- 06月21日军事外出旅游时狗狗寄养的注意事项位置
- 06月21日军事给狗狗吃营养品你真的补对了吗位置
- 06月21日军事多久给西高地梗犬清理腺比较好清理注意事项位置
- 06月21日军事夏季防暑小贴士天热如何避免拉布拉多犬中暑位置
- 06月21日军事夏季适合领养腊肠狗狗吗位置
- 06月20日军事猫得狂犬病的症状大部分会有这些表现位置
- 06月20日军事猫尾巴的秘密竟能表情达意位置
- 06月20日军事猫咪饲料及食量要按照年龄分配位置
- 06月20日军事猫才是真正的高智商动物位置
- 06月20日军事猫咪训练的关键词有哪些位置