java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...

我的用例是使用JDK 6中提供的ToolProvider和

JavaCompiler类从java程序编译生成的源文件.源文件包含对上下文类加载器中的类的引用(它在J2EE容器中运行),但不包含在系统类加载器中.我的理解是,默认情况下,ToolProvider将使用系统类加载器创建JavaCompiler实例.

有没有办法为JavaCompiler指定一个类加载器?

我尝试了这种方法,从IBM DeveloperWorks上的某些东西进行了修改:

FileManagerImpl fm =

new FileManagerImpl(compiler.getStandardFileManager(null,null,null););

将FileManagerImpl定义为:

static final class FileManagerImpl

extends ForwardingJavaFileManager {

public FileManagerImpl(JavaFileManager fileManager) {

super(fileManager);

}

@Override

public ClassLoader getClassLoader(JavaFileManager.Location location) {

new Exception().printStackTrace();

return Thread.currentThread().getContextClassLoader();

}

}

堆栈跟踪表明它仅在注释处理期间调用一次.我验证了要编译的源文件中引用的类不在系统类路径中,但可以从上下文类加载器中获得.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部