Gil*_*ili 6 java compiler-construction casting classloader
似乎无法使用javax.tools.ToolProviderAnt或Webstart所需的自定义类加载器:http://bugs.sun.com/view_bug.do?video_id = 6548428
javax.tools.ToolProvider.getSystemJavaCompiler()加载javax.tools.JavaCompiler到URLClassLoader中,其父级是系统类加载器.API似乎不允许用户指定父类加载器.
如何使用javax.tools.JavaCompiler自定义类加载器?
例如:
MyParserTaskMyParserTask 解析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
Run Code Online (Sandbox Code Playgroud)
MyParserTask在JavacTask不ClassCastException出错的情况下进行交互.有任何想法吗?
OSGi 经常出现此问题。有些人提出了“桥接类加载器”,例如这篇文章(它可能只桥接接口,而不桥接子类,所以也许你不能直接使用它)。
如果您只想在“外部”对象上调用几个方法,您也可以使用反射:
javax.tools.CompilationTask task;
task.getClass().getMethod("someMethodInTheSubclassThatICannotSee").invoke("a");
Run Code Online (Sandbox Code Playgroud)
基于反射思想,也许脚本语言也很有帮助(Groovy、Beanshell、JavaScript)。
| 归档时间: |
|
| 查看次数: |
2681 次 |
| 最近记录: |