使用JavaCompiler和Classpath引用jars in ear

时间:2013-05-10 07:58:59

标签: classpath classloader java-ee-6 ear java-compiler-api

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

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

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

我很欣赏这是一个罗嗦的问题,但任何帮助都会受到赞赏。

由于

1 个答案:

答案 0 :(得分:1)

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

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