【问题标题】:Using JavaCompiler with Classpath referencing jars within ear将 JavaCompiler 与类路径一起使用,在 ear 中引用 jar
【发布时间】:2013-05-10 07:58:58
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 2012-03-28
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2017-01-05
      相关资源
      最近更新 更多