使用javaccompiler,类路径在ear中引用jar



我正在处理一个项目,其中部署在JBoss服务器上的企业存档(ear)需要动态编译(并运行)一个类。我使用javaccompiler类来完成此操作—复杂性来自于正在编译的类对ear中的ejb jar中包含的一些类的引用。

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

考虑到动态编译是从有问题的ear发生的,因此系统的类装入器可以访问所需jar的内容,是否有任何方法可以告诉编译器只使用系统类装入器装入的类?

我知道这是一个冗长的问题,但如果有任何帮助,我将不胜感激。

谢谢

似乎没有简单的方法可以让JavaCompiler加载来自ClassLoader的编译代码的依赖项。但是,可以直接实现JavaFileManager,并使用上下文ClassLoader (getResource(<class/resource name>))上的资源查找来重定向StandardLocation.CLASS_PATH的操作。这将取消StandardJavaFileManager直接操作File的限制。

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

相关内容

  • 没有找到相关文章

最新更新