2013-05-10 90 views
1

我正在研究在JBoss服务器上部署企业档案(耳)需要动态编译(和运行)类的项目。我正在使用JavaCompiler类来执行此操作 - 复杂性来自正在编译的类引用包含在ejb jar中的某些类的引用。将JavaCompiler与类路径一起引用耳内的罐子

当部署的耳朵在部署时“爆炸”时,这不是问题,所以它只是一个目录而不是存档 - 在这种情况下,我可以在编译器的-classpath选项中指定所需的jar ,编译工作正常。不幸的是,由于我正在使用的系统的限制,部署这些耳朵'爆炸'并不是一个可接受的解决方案,编译器似乎无法在归档中查看所需的jar。

鉴于动态编译是从有问题的耳朵进行的,因此系统的类加载器可以访问所需jar的内容,有什么方法可以告诉编译器只使用加载的类由系统类加载器?

我很欣赏这是一个罗嗦的问题,但任何帮助将不胜感激。

感谢

回答

1

看来,有没有简单的方法有编译代码的JavaCompiler负荷依赖从ClassLoader。但是,可以直接实施JavaFileManager并使用上下文ClassLoadergetResource(<class/resource name>))上的资源查找重定向StandardLocation.CLASS_PATH的操作。这将撤销直接在File上操作的StandardJavaFileManager的限制。

有人已经似乎已经prototypically实施了计算策略: http://atamur.blogspot.de/2009/10/using-built-in-javacompiler-with-custom.html