【发布时间】:2011-01-19 22:02:55
【问题描述】:
似乎无法按照 Ant 或 Webstart 的要求从自定义类加载器中使用 javax.tools.ToolProvider:http://bugs.sun.com/view_bug.do?bug_id=6548428
javax.tools.ToolProvider.getSystemJavaCompiler() 将javax.tools.JavaCompiler 加载到 URLClassLoader 中,其父级是系统类加载器。 API 似乎不允许用户指定父类加载器。
如何使用自定义类加载器中的javax.tools.JavaCompiler?
例如:
- Ant 加载
MyParserTask -
MyParserTask解析 Java 源代码 -
MyParserTask由委托给系统类加载器的AntClassLoader加载 -
javax.tools.JavaCompiler由URLClassLoader加载并委托给系统类加载器
稍后,MyParserTask 调用:
javax.tools.CompilationTask task = compiler.getTask(...);
com.sun.source.util.JavacTask javacTask = (com.sun.source.util.JavacTask) task;
javacTask.parse().next().accept(visitor, unused); // parsing happens here
- 看到这两个类如何驻留在不同的类加载器上,
MyParserTask似乎无法与JavacTask交互而不会出现ClassCastException错误。
有什么想法吗?
【问题讨论】:
标签: java compiler-construction casting classloader