0

我正在开发一个使用 Geotools 的应用程序,它又使用 Java 高级成像 (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 是如何找到我的项目使用的库的 - 它们似乎没有被打包到 ejb jar 文件中 - netbeans 在这里做了一些聪明的事情吗?

谢谢,乔什

4

1 回答 1

0

尝试在 Glassfish 上配置 CLASSPATH 以使用 JAI 库。

于 2011-09-10T02:45:29.587 回答