2

我正在开发一个项目,其中部署在 JBoss 服务器上的企业存档(ear)需要动态编译(和运行)一个类。我正在使用 JavaCompiler 类来执行此操作 - 复杂性来自这样一个事实,即正在编译的类引用了包含在耳朵内的 ejb jar 中的一些类。

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

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

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

谢谢

4

1 回答 1

2

似乎没有简单的方法可以JavaCompilerClassLoader. 但是,可以JavaFileManager直接实现并重定向上下文()StandardLocation.CLASS_PATH上使用资源查找的操作。这将取消直接对s 进行操作的限制。ClassLoadergetResource(<class/resource name>)StandardJavaFileManagerFile

似乎有人已经原型实现了这种方法: http ://atamur.blogspot.de/2009/10/using-built-in-javacompiler-with-custom.html

于 2017-07-11T14:53:44.093 回答