Java 高级成像不适用于 Mac 上 Glassfish 中的 EJB 模块,但会显示在 EAR 中



我正在开发一个使用Geotools的应用程序,而Geotools又使用Java Advanced imaging (JAI) API在Glassfish下运行。当我从 Netbeans 以 EJB jar 文件的形式运行我的应用程序时,由于 CDI 扫描期间出现 ClassNotFoundException 而无法部署:

com.google.common.collect.ComputationException: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
    at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:218)
    ....
Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
    at org.jboss.weld.resources.ClassTransformer.loadClass(ClassTransformer.java:189)
    .....
Caused by: java.lang.NoClassDefFoundError: javax/media/jai/PropertySource
at java.lang.ClassLoader.defineClass1(Native Method)
    ....
Caused by: java.lang.ClassNotFoundException: javax.media.jai.PropertySource
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

但是,如果我将 EJB 模块打包到 EAR 文件中,那么我不会得到上面的异常,它似乎加载正常。

由于在 Mac 上 JAI 核心类位于系统扩展库中,我很困惑它如何没有出现在类路径上。

类加载方面,EJB jar 和 EAR 文件之间有区别吗,或者这在 Glassfish/Weld 中很大吗?

想想看 - Glassfish如何找到我的prject使用的库 - 它们似乎没有打包到EJB jar文件中 - Netbeans是否在这里做了一些聪明的事情,以某种方式歪斜?

谢谢乔希

尝试在

Glassfish 上配置 CLASSPATH 以便使用 JAI 库。

最新更新